Tengo una instancia de IDbConnection, que puede ser cualquier conexión, Sql, OleDb, etc. Quiero hacer un contenedor genérico para poder enviar una conexión al contenedor y obtener un conjunto agradable de métodos para una fácil manipulación. tengo un método de consulta, quiero que vuelva un DataTable, por lo que se puede hacerCrear una instancia de IDataAdapter de la instancia de IDbConnection
IDataAdapter adapter = new OleDbDataAdapter();
adapter.SelectCommand = myCommand;
DataSet ds = new DataSet();
adapter.Fill(ds);
El problema es que tengo que usar OleDbAdapter y que no funcionaría para SQL, yo realmente no quiero escriba el código "específico del conductor". ¿Hay alguna manera de obtener una instancia de IDataAdapter de mi objeto IDbConnection instanciado? Sé que puedo crear un comando haciendo
IDbCommand command = _connection.CreateCommand();
Es lógico pensar que debe haber alguna manera fácil de hacer lo mismo con un IDataAdapter.
EDIT:
using (var reader = command.ExecuteReader())
{
var dataTable = new DataTable();
dataTable.Load(reader);
}
Bueno, no exactamente lo que pedí, pero una buena solución.
Cuando escribe el código ADO.Net genérico, en algún momento tendrá los métodos de Fábrica que necesitan ver la propiedad del Proveedor de la cadena de conexión. Si tiene esa pieza, puede usar [DbProviderFactory.CreateDataAdapter] (http://msdn.microsoft.com/en-us/library/system.data.common.dbproviderfactory.createdataadapter.aspx) – mdisibio
+1 para compartir la solución con IDataReader. Tenemos un marco personalizado que se utiliza para manejar conexiones de bases de datos, transacciones, etc., pero (aún) no admite adaptadores de datos. Al usar IDataReader, sin embargo, podemos usar ese marco sin tener que extenderlo/modificarlo. –
Me tomé la libertad de editar su pregunta para agregar la declaración 'using' que [cierra automáticamente el lector] (http://stackoverflow.com/a/2157331/808151). –