首页 新闻 搜索 专区 学院

一个困扰我很久的问题:数据库连接老是超时

0
悬赏园豆:20 [已解决问题] 解决于 2009-06-05 22:55

这个问题已经困扰了我很久了,就是数据库老实超时。显示内容如下:

超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。

虽然在百度,谷歌上甚至院子里有很多朋友都都写出了解决问题的方案,我也是按照解决方案解决,但是还是没有效果,也没有解决实际问题。实际情况是这样的:在本机IIS上设置了一个虚拟站点,当我在同一页面连续刷新十次左右的时候,就会出现上述问题。

详细描述请见:http://www.cnblogs.com/kimbosung/archive/2009/06/04/1496489.html,里面有相关的截图和代码描述,请各位大哥不吝赐教。

RoseNix的主页 RoseNix | 初学一级 | 园豆:5
提问于:2009-06-04 21:04
< >
分享
最佳答案
0

楼主,你的问题应该是连接池满了,查一下相关资料吧,有可能是你的数据连接开了没关,也有可能是你的程序并发连接太多.

I,Robot | 大侠五级 |园豆:9583 | 2009-06-04 22:38
其他回答(8)
0

重启SQL  Server就行了,如果还不行,就重启电脑。不过要想彻底解决,每打开一个链接,请一定要把这个连接给关闭。

麦舒 | 园豆:452 (菜鸟二级) | 2009-06-04 21:32
0

进任务管理器,将aspnet_wp.exe进程结束掉试试看,貌似可以。

known | 园豆:163 (初学一级) | 2009-06-04 21:58
0

你是不是用SqlDataReader来读取数据库信息的?如果是,检查一下,在读取完数据后,有没有close掉

李.net | 园豆:874 (小虾三级) | 2009-06-04 22:10
0

不知道你的数据库是不是用的2000,曾经使用2000数据库的时候遇过类似的问题,2000数据库不知道有啥问题,曾经遇到过当连接数达到100的时候就不能再有连接了(一致没搞明白,不知道是不是由于D版缘故还是我确实出现了问题)

另外使用Reader必须要选择关闭

其次在人物管理器中监测下aspnet进程,看是否在你刷新的时候内存会疯狂的暴涨,如果是的话,哪么考虑程序优化吧

西越泽 | 园豆:10633 (专家六级) | 2009-06-04 23:01
0

  SqlConnection conn = new SqlConnection(sqlString);
                      try
            {
                PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
                SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                cmd.Parameters.Clear();
                return rdr;
            }
            catch (Exception e)
            {
                if (conn.State != ConnectionState.Closed)
                {
                    conn.Dispose();
                    conn.Close();
                }
                throw e;
            }
在这里也有using语句试试吧

希望你以后写代码的时候注意一下规范,呵呵打开的连接要记得关闭的,要不然可能会出现这样的情况,呵呵,用Using就好多了,呵呵

苏飞 | 园豆:2024 (老鸟四级) | 2009-06-04 23:03
0

你使用 SqlHelper.ExecuteReader 方法后会得到一个 SqlDataReader

SqlDataReader dr = SqlHelper.ExecuteReader(....);

这个 dr 持有一条连接,你需要总是调用 dr.Close() 来归还连接.

Launcher | 园豆:45045 (高人七级) | 2009-06-04 23:06
0

网速慢吧?

风海迷沙 | 园豆:4453 (老鸟四级) | 2009-06-05 11:09
0

很大可能就是ExecuteReader 呀,这个比较特殊,因为读取数据的时候他要一直打开着,所以关闭连接不能写在SqlHelper中,也无法在SqlHelper中使用using释放资源,这样的必须在SqlHelper外的代码中关闭连接了~~~

MicroCoder | 园豆:554 (小虾三级) | 2009-06-05 11:56
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册