这个问题已经困扰了我很久了,就是数据库老实超时。显示内容如下:
超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。
虽然在百度,谷歌上甚至院子里有很多朋友都都写出了解决问题的方案,我也是按照解决方案解决,但是还是没有效果,也没有解决实际问题。实际情况是这样的:在本机IIS上设置了一个虚拟站点,当我在同一页面连续刷新十次左右的时候,就会出现上述问题。
详细描述请见:http://www.cnblogs.com/kimbosung/archive/2009/06/04/1496489.html,里面有相关的截图和代码描述,请各位大哥不吝赐教。
楼主,你的问题应该是连接池满了,查一下相关资料吧,有可能是你的数据连接开了没关,也有可能是你的程序并发连接太多.
重启SQL Server就行了,如果还不行,就重启电脑。不过要想彻底解决,每打开一个链接,请一定要把这个连接给关闭。
进任务管理器,将aspnet_wp.exe进程结束掉试试看,貌似可以。
你是不是用SqlDataReader来读取数据库信息的?如果是,检查一下,在读取完数据后,有没有close掉
不知道你的数据库是不是用的2000,曾经使用2000数据库的时候遇过类似的问题,2000数据库不知道有啥问题,曾经遇到过当连接数达到100的时候就不能再有连接了(一致没搞明白,不知道是不是由于D版缘故还是我确实出现了问题)
另外使用Reader必须要选择关闭
其次在人物管理器中监测下aspnet进程,看是否在你刷新的时候内存会疯狂的暴涨,如果是的话,哪么考虑程序优化吧
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就好多了,呵呵
你使用 SqlHelper.ExecuteReader 方法后会得到一个 SqlDataReader
SqlDataReader dr = SqlHelper.ExecuteReader(....);
这个 dr 持有一条连接,你需要总是调用 dr.Close() 来归还连接.
网速慢吧?
很大可能就是ExecuteReader 呀,这个比较特殊,因为读取数据的时候他要一直打开着,所以关闭连接不能写在SqlHelper中,也无法在SqlHelper中使用using释放资源,这样的必须在SqlHelper外的代码中关闭连接了~~~