【发布时间】:2015-02-26 15:56:09
【问题描述】:
我有一个IDbConnection的实例,可以是任何连接,Sql,OleDb等。 我想制作一个通用包装器,这样我就可以向包装器发送一个连接并获得一组很好的方法以便于操作。 我有一个 Query 方法,我希望它返回一个 DataTable,所以我可以这样做
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 代码时,有时您将拥有需要查看连接字符串的 Provider 属性的工厂方法。如果你有那块,你可以使用DbProviderFactory.CreateDataAdapter
-
+1 用于与 IDataReader 共享解决方案。我们有一个自定义框架,用于处理数据库连接、事务等,但它(尚)不支持数据适配器。然而,通过使用 IDataReader,我们可以使用该框架而无需扩展/修改它。
-
我冒昧地编辑了您的问题,添加了
using声明 automatically closes the reader。
标签: c#