首页 新闻 会员 周边 捐助

多线程 sqlconnection 安全

0
悬赏园豆:20 [已解决问题] 解决于 2013-08-28 10:37

在asp.net 中,由于经常很多人访问页面。有时会出现这样的bug。

查了下,似乎是因为在多线程中,sqlconnection.close 后,又被dispose后,才会出现这样问题。不知道各位大神在遇到这样的问题都是怎么解决。或者在多线程使用sqlconnection时,对于sqlconnection线程安全方面都有什么样的解决方案。不胜感激。谢谢。

Roc-Lee的主页 Roc-Lee | 初学一级 | 园豆:12
提问于:2013-08-23 23:23
< >
分享
最佳答案
1

查询语句错了吧~~~

收获园豆:4
幻天芒 | 高人七级 |园豆:37205 | 2013-08-24 17:31

http://tianmoboping.blog.163.com/blog/static/157395322012012112914202/

请大神看下这篇文章。他只说了原因,但是该怎么解决,还是不明白。

Roc-Lee | 园豆:12 (初学一级) | 2013-08-24 23:45

@Mr Li:

1、 如果是版本不对的话,首先查看iis运行的Framework版本,然后查看发布的Framework版本,如果不同,那么就修正为相同;

2、如果你在使用connection后,用了Connection.Close方法,那么注释掉这句;

3、将连接的写法修改为using的方式,自动释放资源,而不要手动的去Close~

大概就是这意思,你试试~

幻天芒 | 园豆:37205 (高人七级) | 2013-08-25 12:19
其他回答(3)
1

datatable 加载完就断开连接所以跟sqlconnection没关系,你的错误是由于查询语句引起的,没有title这一列。

收获园豆:4
geass.. | 园豆:1821 (小虾三级) | 2013-08-24 06:52

http://tianmoboping.blog.163.com/blog/static/157395322012012112914202/

请大神看下这篇文章。他只说了原因,但是该怎么解决,还是不明白。

支持(0) 反对(0) Roc-Lee | 园豆:12 (初学一级) | 2013-08-24 23:46

@Mr Li: 这个问题真没有遇到过,帮不了你,但别人建议微软发布的SqlHelper,我也经常用这个。

支持(0) 反对(0) geass.. | 园豆:1821 (小虾三级) | 2013-08-25 21:24
1

人过多的时候,报的错不是这样子的错误,亲。我这里遇到过负载过多的情况。就是用户登不进去。很慢。但是不会出现这种问题的。

收获园豆:4
海上将军 | 园豆:306 (菜鸟二级) | 2013-08-24 11:32

那为什么有时候会出现这种问题,刷新一下就好了,sql 中有该列的。那会不会是因为一个人登陆的时候,某个页面在sqlconection.close的时候,(在上个页面还没有sqlconection.dipose),另一个页面从连接池获取了这个sqlconection,然后又执行了查询,紧接着上个页面执行了sqlconection.dipose,然后另一个页面的sqlconection就被回收了,从而出现山面的问题?

支持(0) 反对(0) Roc-Lee | 园豆:12 (初学一级) | 2013-08-24 11:49

@Mr Li: 这个链接数据库应该是封装起来的。我不知道你的怎么写的。我的是每次查询结束都会dispose的

支持(0) 反对(0) 海上将军 | 园豆:306 (菜鸟二级) | 2013-08-24 19:10

http://tianmoboping.blog.163.com/blog/static/157395322012012112914202/

请大神看下这篇文章。他只说了原因,但是该怎么解决,还是不明白。

支持(0) 反对(0) Roc-Lee | 园豆:12 (初学一级) | 2013-08-24 23:45
1

using(SqlConnection conn = new SqlConnection())

{

   if(inTab.Rows.Count == 1)

{

     inTitle = inTab.Rows[0]["title"].ToString();

}  

}

按这种方式用。

收获园豆:4
Launcher | 园豆:45050 (高人七级) | 2013-08-26 11:34
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册