- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个 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);
}
嗯,这不完全是我要求的,而是一个不错的解决方案。
最佳答案
这是一个粗略的示例,说明如何使用反射获取适配器。
IDataAdapter GetAdapter(IDbConnection connection) {
var assembly = connection.GetType().Assembly;
var @namespace = connection.GetType().Namespace;
// Assumes the factory is in the same namespace
var factoryType = assembly.GetTypes()
.Where (x => x.Namespace == @namespace)
.Where (x => x.IsSubclassOf(typeof(DbProviderFactory)))
.Single();
// SqlClientFactory and OleDbFactory both have an Instance field.
var instanceFieldInfo = factoryType.GetField("Instance", BindingFlags.Static | BindingFlags.Public);
var factory = (DbProviderFactory) instanceFieldInfo.GetValue(null);
return factory.CreateDataAdapter();
}
关于c# - 从 IDbConnection 实例实例化 IDataAdapter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10723558/
在 MVC 项目中,我有一个带有命令和查询的服务层。 在其中一些命令和查询中,我使用了需要连接的 Dapper。 public class GetPostsStatsQuery { public
我应该如何将 IDbConnection 和 IDbTransaction 与 Dapper 一起使用? 目前我只使用 IDbConnection 。如下: using (SqlConnection
当我编写应用程序时,我使用 System.Data 接口(interface)(IDbConnection、IDbCommand、IDataReader、IDbDataParameter 等...)。
我想用 firebird db 测试 dapper micro orm,但我很难访问 firebird。 Firebird 服务器已启动并运行,数据库中填充了一些虚拟数据,并存储在 c:\mydata
我有时会引发此异常: System.InvalidOperationException: 'The ConnectionString property has not been initialized
我有一个使用 autofac 进行依赖注入(inject)的 .NET MVC 应用程序。当应用程序启动时,以下代码注册 IDbConnection var connectionString = C
当连接到 SQL-Server 时,我的程序执行挂起在 .Open() 方法上超过指定的 2 秒超时。 当数据库所在的机器离线或重新启动时,我设法重现了这个问题。当数据库所在的机器启动时,程序的执行将
我有一些按顺序调用的方法,它们都按顺序对 MySQL 数据库执行查询: UpdateInvoice() - > UpdateOrderItems(connection) |--------
我有一个 IDbConnection 的实例,它可以是任何连接、Sql、OleDb 等。我想制作一个通用包装器,这样我就可以向包装器发送一个连接并获得一组很好的方法以便于操作。我有一个 Query 方
虽然我的假设听起来很主观,但经过一些研究后,我发现开发人员喜欢使用虚拟 Try/Catch 而不是使用 Using statement 的情况并不少见。用于 IDbConnection/IDbTran
我知道将 IDbConnection 对象包装在 using block 中可确保调用 Dispose 并释放它正在使用的资源。话虽如此,我是否还需要将 IDbCommand 和 IDataReade
我在我的 ASP.NET WebForms 解决方案中使用了 dapper。 我所有处理数据的类都从这个基类中检索一个打开的连接 public abstract class SalesDb : IDi
我需要一些帮助 我尝试将 INSERT 插入到我的 SQL 数据库中,但我做不到,因为在此代码行中给我一个错误: commandoSQL.Connection = dbcon; 我收到这个错误: A
TLDR:注入(inject)连接工厂与 IDbConnection 本身的原因是什么。 我目前在 .net MVC 中使用 Autofac 将 IDbConnection 实例注入(inject)到
Entity Framework cotext DbContext 具有采用 DbConnection 的构造函数。为什么不是 IDbConnection? 是否通常将 DbConnection 传递
我有一个 .Net 核心 Web 应用程序和 .net 核心库。在使用 Dapper 时,我需要传入一个继承自 IDbConnection 的具体类。问题是在 .Net Core 中 System.D
我正在尝试使用Dapper.Contrib使用 .insert() 方法等扩展 IDbConnection 接口(interface)的功能。 为此,我遵循了一些简短且分散的文档 here和 here
注入(inject)连接字符串与 IDbConnection 实例的权衡是什么? ? 我使用 StructureMap 将各种服务注入(inject)到我的 ASP.NET MVC 应用程序中,其中大
我想知道关于在 .Net 应用程序中维护与数据库的连接的最佳做法是什么(ADO.NET,但我想这种做法对于任何数据层都应该是相同的)。我应该创建一个数据库连接并将其传播到我的整个应用程序,还是只传递连
在 Dapper 中使用 BeginTransaction() 和 IDbConnection 的正确方法是什么? 我创建了一个方法,我必须在其中使用 BeginTransaction()。这是代码。
我是一名优秀的程序员,十分优秀!