问一下C#进行sql server 数据读写操作,对数据连接的控制

梦雨奇缘 2016-06-21 04:50:15
首先我们建 conn, conn.open() ; 然后对应的sql , 执行完成后 conn.close(); 然后再去应用程序池中查看 , 刚刚用的数据连接生成的对应的ID号,还在应用程序池中 ,但status 状态为sleeping,根本没有真正的释放掉。 我的应用程序池最大连接数是200,这样子操作几次数据,很快就到了瓶颈...没有可用的连接了,然后就报漠名其妙的错误!


在这里 ,我想问一下,怎 样合理利用数据连接。不至于每次都出现连接数不够用的情况。或者说怎么处理应用程序池,达到合理利用连接和释放连接。
...全文
317 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
龍过鸡年 2016-06-23
  • 打赏
  • 举报
回复
引用 楼主 kkbbllcc 的回复:
首先我们建 conn, conn.open() ; 然后对应的sql , 执行完成后 conn.close(); 然后再去应用程序池中查看 , 刚刚用的数据连接生成的对应的ID号,还在应用程序池中 ,但status 状态为sleeping,根本没有真正的释放掉。 我的应用程序池最大连接数是200,这样子操作几次数据,很快就到了瓶颈...没有可用的连接了,然后就报漠名其妙的错误! 在这里 ,我想问一下,怎 样合理利用数据连接。不至于每次都出现连接数不够用的情况。或者说怎么处理应用程序池,达到合理利用连接和释放连接。
你给自己提个问题:为什么不能一直 Open,直到关闭程序时再 Close 呢?
bluedoctor 2016-06-23
  • 打赏
  • 举报
回复
只需要 Connection对象 Close即可,连接对象会放入连接池,提供使用效率,SOD框架一直是这样用的,没有出现过问题。
模信科技BIM 2016-06-23
  • 打赏
  • 举报
回复
可以用ef 超级简单
戈壁上的月光 2016-06-23
  • 打赏
  • 举报
回复
引用 10 楼 zhi_ai_yaya 的回复:
string connStr = String.Format("server={0};user id={1}; password={2}; database={3}; pooling=false",@"192.168.8.196", @"robot", @"robot", @"robot");

using(conn = new MySqlConnection(connStr))
{
   //Open the connection
   conn.Open();
   
   //Do somthing useful
}
换这个语句吧,应用线程池的事情,不关你事,你不要管。正常情况下出现连接数不够用的情况也不是你的事情,就好像公交车就是那么大,只能挤上去100个,你非要挤上去200个那是不可能的,剩下的100个只能。。。等。
楼上的可以,用Using释放
我叫小菜菜 2016-06-22
  • 打赏
  • 举报
回复
string connStr = String.Format("server={0};user id={1}; password={2}; database={3}; pooling=false",@"192.168.8.196", @"robot", @"robot", @"robot");

using(conn = new MySqlConnection(connStr))
{
   //Open the connection
   conn.Open();
   
   //Do somthing useful
}
换这个语句吧,应用线程池的事情,不关你事,你不要管。正常情况下出现连接数不够用的情况也不是你的事情,就好像公交车就是那么大,只能挤上去100个,你非要挤上去200个那是不可能的,剩下的100个只能。。。等。
drifter2002 2016-06-22
  • 打赏
  • 举报
回复
应该是操作数据库后,连接关闭代码有问题,导致连接无法回收到连接池 代码类似以下: Connection.Close(); Connection.Dispose(); DataAdapter.Dispose(); Command.Dispose();
梦雨奇缘 2016-06-21
  • 打赏
  • 举报
回复
conn.close();conn.dispose(); 这两段有加上去试过 ,还是不行,至于直接把conn设置为null,不知道可以不可以。我暂时先记下,后面试试。看有没有更好的方法。 我就不明白了,IIS应用程序池为什么会一直占用那么多空连接而不释放,或者说给别的程序用。
jhll 2016-06-21
  • 打赏
  • 举报
回复
conn.close();conn.dispose();conn = null;加这个再试下...
梦雨奇缘 2016-06-21
  • 打赏
  • 举报
回复
我这样说好了,比如这里有一个员工表,我先建连接,取了名字,关掉连接,再建连接,取了性别,再关掉连接。就这样有个4,5次。每次数据连接都是 new SqlConnection("数据库连接") ,用完之后,都有Close(). 这样有个几个用户,反复刷新几次页面,IIS的应用程序池 就刷刷的往上升。一会就满了 现在最大的问题,就是应用程序池到最后,没有可用的连接了。
正怒月神 2016-06-21
  • 打赏
  • 举报
回复
话说,你取数据,为何会新增好几个新的数据连接?你查看一下你取数据的地方,到底对数据库干了什么
南天空 2016-06-21
  • 打赏
  • 举报
回复
用单实例模式试试。
正怒月神 2016-06-21
  • 打赏
  • 举报
回复
数据库,自己本来就有数据库连接池。这方面sqlserver已经帮你搞定了。 不过前提是,你每次操作完,要记得关闭啊。。。。Close
梦雨奇缘 2016-06-21
  • 打赏
  • 举报
回复
多线程是没用到 ,就是网页上取数据的时候,有新生成了好几个连接在用。就是一项数据,用一个连接取数,关闭后重新建新的连接,再接着取下一个数。 至于数据连接 ,都是先open(),然后再colse(),应该算是有正常关闭的。
xdashewan 2016-06-21
  • 打赏
  • 举报
回复
正常打开关闭,多线程别用同一个链接即可

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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