我有一个IDbConnection的实例,它可以是任何连接,Sql,OleDb等。 我想制作一个通用包装器,这样我就可以发送包装器一个连接并获得一个很好的集合易于操作的方法。 我有一个查询方法,我希望它返回一个DataTable,所以我可以做从IDbConnection实例实例化IDataAdapter
IDataAdapter adapter = new OleDbDataAdapter();
adapter.SelectCommand = myCommand;
DataSet ds = new DataSet();
adapter.Fill(ds);
的问题是我必须使用OleDbAdapter,它不会对SQL工作,我真的不希望编写“驱动程序特定”代码。 有没有一种方法可以从我实例化的IDbConnection对象中获取IDataAdapter实例?我知道我可以创建一个命令做
IDbCommand command = _connection.CreateCommand();
这是唯一合乎逻辑的思考,必须有一些简单的方法做同样与IDataAdapter。
编辑:
using (var reader = command.ExecuteReader())
{
var dataTable = new DataTable();
dataTable.Load(reader);
}
那么不正是我要的但很好的解决方案。
当您编写通用的ADO.Net代码时,在某些时候,您将需要Factory方法来查看连接字符串的Provider属性。如果您拥有该部分,则可以使用[DbProviderFactory.CreateDataAdapter](http://msdn.microsoft.com/zh-cn/library/system.data.common.dbproviderfactory.createdataadapter.aspx) – mdisibio
+1来共享解决方案与IDataReader。我们有一个用于处理数据库连接,事务处理等的自定义框架,但它还不支持数据适配器。通过使用IDataReader,我们可以使用该框架而不必扩展/修改它。 –
我冒昧地编辑你的问题,添加'using'语句[自动关闭阅读器](http://stackoverflow.com/a/2157331/808151)。 –