Newsgroup: it.comp.lang.visual-basic
Titolo: [.Net] Utilizzare dataadapter generici

Ciao a tutti.
Sto realizzando una classe generica per l'accesso ai dati, che gestisca sia
gli oggetti SqlClient che OleDB.
Ho dichiarato una variabile generica utilizzando l'interfaccia
IDbDataAdapter.
Quando creo la variabile le assegno un SqlDataAdapter oppure un
OleDBlDataAdapter a seconda di cosa è stato richiesto dall'utente.
Il mio problema è che il metodo Fill esposto da questa variabile Generica
non ha tutti gli overload che ci sono nel SqlDataAdapter e
nell'OleDBDataAdapter.
C'è un solo metodo Fill a cui passare il Dataset.
Ho provato a guardare nell'object browser e ho visto che il SqlDataAdapter
ha come interfaccia sia IDbDataAdapter che DbDataAdapter. Come posso fare in
modo di mantenere la genericità del codice ma di riuscire ad utilizzare gli
overload del metodo Fill?
Questo è il mio codice:
Dim GenericDataAdapter As IDbDataAdapter
Select Case m_DataProvider
Case DataProviderType.Sql
    'Oggetti Connection, Command e DataAdapter di SqlServer
    GenericConnection = New SqlClient.SqlConnection(m_ConnectionString)
    GenericCommand = New SqlClient.SqlCommand()
    GenericDataAdapter = New SqlClient.SqlDataAdapter()
Case DataProviderType.OleDb
    'Oggetti Connection, Command e DataAdapter OleDB
    GenericConnection = New OleDb.OleDbConnection(m_ConnectionString)
    GenericCommand = New OleDb.OleDbCommand()
    GenericDataAdapter = New OleDb.OleDbDataAdapter()
End Select
Try
    'Apro la connection
    GenericConnection.Open()
    'Preparo il command per l'esecuzione delle istruzioni
    PrepareCommand(CType(Nothing, SqlClient.SqlTransaction), commandType,
commandText, commandParameters)
    'Associo il command al DataAdapter
    GenericDataAdapter.SelectCommand = GenericCommand
    'Creo un nuovo DataSet
    m_DataSet = New DataSet()
    'Riempio il dataset con il risultato del command, utilizzando
l'evenutale
    'nome specificato per la tabella
    GenericDataAdapter.Fill(m_DataSet)
...
Grazie e ciao
Skysurfer

 gestisca sia gli oggetti SqlClient che OleDB.
risposta a botta calda, che non vorrei fosse considerata polemica :-)
pensi che se fosse stato possibile implementare completamente quanto da te
cercato, non ci avrebbe già pensato microsoft?
C'è già ado, quello vecchio, che rinunciava alle specificità del database
singolo per poter accedere con la stessa struttura a tutti i motori. con
ado.net
, giusta o sbagliata che sia, hanno scelto la strada opposta, per ogni
motore (quelli gestiti fino adesso, decisamente pochini) la sua libreria. Per
unificare il tutto ti devi accontentare del minimo comun denominatore tra le due
librerie, rinunciando ad implementare le particolarità di ciascuna.
--
Salutoni
Sergio

 ha scritto nel messaggio
news:b6k58b$645k1$1...@ID-173193.news.dfncis.de...

Ma gli overload del metodo Fill ci sono sia in SqlClient che in OleDB!
Ciao
Skysurfer


Non è stato postato tutto il codice , quindi per eseguire un test lo si
dovrebbe ricostruire.
dalla guida:
L'interfaccia IDbDataAdapter, ad esempio, definisce la proprietà
SelectCommand, mentre l'interfaccia DbDataAdapter definisce il metodo Fill
che utilizza un oggetto DataTable come parametro. A sua volta, la classe
OleDbDataAdapter eredita la proprietà SelectCommand e il metodo Fill, e
definisce anche altri due overload del metodo Fill che utilizza un oggetto
Recordset ADO come parametro.
Sembra che DbDataAdapter definisce il metodo Fill e no IDbDataAdapter
giuseppeD