- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
使用 ADO.NET IDbConnection 和 IDbCommand 同时对同一个数据库执行多个命令,前提是ADO.NET 实现是在运行时指定的。
IDbConnection
的 MSDN 文档没有指定任何线程限制。 SqlConnection
页面有标准免责声明“不保证任何实例成员都是线程安全的。” IDbCommand
和 SqlCommand
文档同样没有提供信息。
假设没有单个实例成员是线程安全的,我仍然可以从一个连接(在同一线程上)创建多个命令,然后在不同线程上并发执行它们。
大概这仍然无法达到预期的效果,因为(我假设)在与数据库的单个底层连接上一次只能执行一个命令。因此并发的 IDbCommand
执行将在连接处被序列化。
所以这意味着我们必须创建一个单独的 IDbConnection
,如果您知道您正在使用 SqlConnection
就可以了,因为它支持池化。如果您的 ADO.NET 实现是在运行时确定的,则无法做出这些假设。
这是否意味着我需要实现自己的连接池以支持对数据库的高性能多线程访问?
最佳答案
您将需要管理对实例成员的线程访问,但大多数 ADO 实现管理它们自己的连接池。他们通常希望同时运行多个查询。
我会根据需要随意打开和关闭尽可能多的连接,并处理在池不可用时可能抛出的异常。
这是关于 ADO connection pooling 的文章
关于c# - 如何安全地使用 ADO.NET IDbConnection 和 IDbCommand 并发执行多个数据库命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2206808/
我已经创建了一个派生的 IDbCommand 类,我想使用它来更轻松地进行 Sql-DB 访问。 internal class Prozedur : IDbCommand { private
我想按照这些行创建一个多行插入语句: insert into foo ( value1, value2, value3 ) values ( "1", "2", "3"), (
我想更新 IDbCommand 参数的值,当它已经存在时 public void AddParameter(IDbCommand command, string name, object va
我正在使用 .NET Core 2.0。我有以下调用 IDbCommand.ExecuteReader 的函数 public async Task> ReadAllAsync( System.
我正在创建一个小的辅助函数来返回 DataTable .我想与 ADO.Net 的所有供应商合作支持,所以我想把所有东西都用IDbCommand或 DbCommand在可能的情况下。 我遇到了以下代码
我正在使用 ADO.net 调用存储过程以执行对 Sybase 数据库的插入,并且我想包括单元测试以确保插入调用正常工作。 根据规范: IDbCommand.ExecuteNonQuery() Ret
我正在尝试使用 IdbCommand 执行一些相对简单的操作来执行插入查询。 代码如下: using (IDbConnection conn = DbHelper.GetConnection(DbCo
我正在试验如何让 Web 应用程序支持多个数据库,特别是 SQL Server 和 MySQL。 我已经设置了我的 SQL 帮助程序类,它将负责连接到数据库和执行查询。我正在使用 IDBCommand
系统.数据.SqlClient.SqlCommand有方法 BeginExecuteNonQuery BeginExecuteReader BeginExecuteXmlReader 和 EndExe
这是向 IDbCommand 接口(interface)添加异步功能的合理方法吗? public async static Task ExecuteReaderAsync(this IDbComman
我有一个数据访问类的基类。此类实现 IDisposable。该基类包含 IDbConnection 并在构造函数中对其进行实例化。 public class DALBase : IDisposable
我已经让一个自定义类继承IDataReader并且已经成功使用自定义类实现自定义 ServerWriter sqlBulkCopy,该自定义类使用 C# 对象而不是 DataTable。 正如我所怀疑
大家好。我如何解决这个问题?我收到错误消息: The IDbCommand and IDbConnection implementation in the assembly MySql.Data co
我一直在尝试创建一些独立于数据库的代码,如下所示: IDbCommand command = connection.CreateCommand(); command.CommandText = "..
在使用IDbCommand、IDataReader、DataTable时,能否依赖析构函数dispose资源,或者不直接调用dispose这些对象会不会泄漏资源? 最佳答案 它们不会泄漏,但会消耗资源
目标 使用 ADO.NET IDbConnection 和 IDbCommand 同时对同一个数据库执行多个命令,前提是ADO.NET 实现是在运行时指定的。 调查 IDbConnection 的 M
我正在使用 System.Data.SQLite(版本 1.0.74.0 和 .NET4 x64)试用 Fluent NHibernate 2.12。 尝试创建我的 session 工厂时出现以下错误
无论如何我可以使这个数据库代码更短吗?它工作正常,但看起来非常冗长和重复。我想用方法包装其中的一些会更好,但是是否可以进行其他改进来缩短它? using (IDbConnection theConn
我是一名优秀的程序员,十分优秀!