111,129
社区成员
发帖
与我相关
我的任务
分享using(DbConnection conn= 创建数据库连接())
{
conn.Open();
.......数据库操作
} 这样的代码就行了,这样老老实实地“及时关闭数据库连接”(using{ } 结构的结尾会确保自动关闭数据库连接),而用不着你去处理什么“共享连接”的问题。
如果你想考虑多一点,就理解ado.net 的连接池概念。它说明了:为什么要“及时关闭数据库连接”。var 日志内容 = "asdfasdfaasf";
ThreadPool.QueueUserWorkItem(h =>
{
Log.Write("abc", 日志内容);
});
这个日志动作可能用5毫秒就完成了,假设这里的 Log 语句是记录到本地的某个数据库中,此 Log 语句完全由 .net 系统线程池去分配(复用)另外一个已经空闲下来的线程去执行那一行 Log 语句。它此时根本跟“一个线程用一个连接”没有任何关系。
再比如说我在 ADO.NET 使用 DbDataReader 循环遍历一个数据库查询结果时,其中的我还是需要访问数据库,那么在这个循环之内我肯定还要使用另外一个数据库连接,否则ADO.NET 就会抛出“连接已经打开,不能重复使用”之类的异常崩溃了。此时也谈不上线程了,一小段代码都需要“至少两个数据库连接”才能保证执行。
可见,想太多太技术化了,反而在开发时没法应用技术。