using释放数据库

qq1358661914 2016-03-25 03:43:41

using (MySqlConnection _myConn = new MySqlConnection(_myConnStr))

_myConn.open()
MySqlConnection myConn = new MySqlConnection(_myConnStr);
。。。。。。
myConn.open();
。。。。。。。
myConn.Dispose();

。。。。省略




这样写会有什么问题吗?
...全文
224 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 2 楼 qq1358661914 的回复:
别人写的,出现死锁,我在找错误呢,其实刚才整个套在try里面,没写出来而已
遇到任何问题,都是要针对问题而设计测试用例。如果说“这样写会有什么问题吗?”的方式来找问题,就如大海捞针,蒙自己也蒙领导(领导是个外行)。 如果感觉是“死锁”,那么就应该针对死锁而设计测试用例。
  • 打赏
  • 举报
回复
如果你有一点点洁癖,那么可以再写得精确一点
using (MySqlConnection _myConn = new MySqlConnection(_myConnStr))
{
       _myConn.open()
       。。。。。。
       using(MySqlConnection myConn = new MySqlConnection(_myConnStr))
       {
                myConn.open();
                。。。。。。。
        }         
       。。。。省略
}
说到底,其实先看一个指标,就是不会出现 Dispose 语句。 虽然 using{ } 结构的目的就是确保程序一定会执行 Dispose 语句,但是如果你手工写 Dispose 语句,反而是显示出来你不会写 using { } 结构代码了! 是否理解这个逻辑?!
  • 打赏
  • 举报
回复
仅从你的代码出发,比较规矩(也就是说“一致性”)的写法是
using (MySqlConnection _myConn = new MySqlConnection(_myConnStr))
using(MySqlConnection myConn = new MySqlConnection(_myConnStr))
{
       _myConn.open()
       
       。。。。。。
        myConn.open();
        。。。。。。。
         
       。。。。省略
}
因为你既然已经知道要用 using{ } 结构了,怎么又在另一个 DbConnection 上忘记呢?
  • 打赏
  • 举报
回复
你先搞清楚是数据库里出现了死锁还是程序里的,然后再找 有时候多个事务相交叉,执行SQL的顺序也会导致数据库死锁,虽然最终是改程序,但是死锁是在数据库里头
zhouingdong 2016-03-25
  • 打赏
  • 举报
回复
实现IDispose接口,自然就可以使用using的方式实例对象了,实现Dispose的方法,就要完成要释放的内容,如果Dispose内容没有,自然要在using里完成资源的释放。个人认为如果楼下感觉不对可以给我反馈,谢谢。
江南小鱼 2016-03-25
  • 打赏
  • 举报
回复

//这样写就行了,using会自动对数据库连接对象进行回收的
//当然,你手工Close、Dispose也是可以的
using (MySqlConnection _myConn = new MySqlConnection(_myConnStr))
{
       _myConn.open();
}
qq1358661914 2016-03-25
  • 打赏
  • 举报
回复
引用 1 楼 dongxinxi 的回复:
写法没什么问题,但是为什么要开两个连接? MySqlConnection myConn = new MySqlConnection(_myConnStr); 如果中间这里出错将导致后面释放没有机会执行, myConn.Dispose(); 可以改成 MySqlConnection myConn = new MySqlConnection(_myConnStr); try { 。。。。。。 myConn.open(); 。。。。。。。 } finally { myConn.Dispose(); }
别人写的,出现死锁,我在找错误呢,其实刚才整个套在try里面,没写出来而已
  • 打赏
  • 举报
回复
写法没什么问题,但是为什么要开两个连接? MySqlConnection myConn = new MySqlConnection(_myConnStr); 如果中间这里出错将导致后面释放没有机会执行, myConn.Dispose(); 可以改成 MySqlConnection myConn = new MySqlConnection(_myConnStr); try { 。。。。。。 myConn.open(); 。。。。。。。 } finally { myConn.Dispose(); }

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧