急晕了的问题:::asp在访问数据库时出现连接超时错误,提示可能达到数据库连接的最大数
因为,页面上数据较多,全部提交保存的时候,对每一条数据都有个去数据库CHECK的步骤,就会出现如下错误:
タイムアウトに達しました。プールから接続を取得する前にタイムアウト期間が過ぎました。プールされた接続がすべて使用中で、プール サイズの制限値に達した可能性があります。
説明 : 現在の Web 要求を実行中に、ハンドルされていない例外が発生しました。エラーに関する詳細および例外の発生場所については、スタック トレースを参照してください。
例外の詳細: System.InvalidOperationException: タイムアウトに達しました。プールから接続を取得する前にタイムアウト期間が過ぎました。プールされた接続がすべて使用中で、プール サイズの制限値に達した可能性があります。
ソース エラー:
行 1649: if(conn != null && conn.State.Equals(ConnectionState.Closed))
行 1650: {
行 1651: conn.Open();
行 1652: }
行 1653:
以下是我写的程序
public int getDateDiff(DateTime startDate,DateTime endDate)
{
SqlDataReader reader = null;
int DiffMonth = 0;
try
{
string sql = "select datediff(month,@startDate,@endDate) from sysusers ";
SqlCommand sqlcmd = new SqlCommand(sql,conn);
sqlcmd.Parameters.Add( "@startDate ", SqlDbType.VarChar).Value = startDate;
sqlcmd.Parameters.Add( "@endDate ", SqlDbType.VarChar).Value = endDate;
if(conn != null && conn.State.Equals(ConnectionState.Closed))
{
conn.Open();
}
reader = sqlcmd.ExecuteReader();
if(reader.Read())
{
DiffMonth = reader.GetInt32(0);
}
return DiffMonth;
}
catch(SqlException ex)
{
Console.WriteLine(ex.Message);
return 0;
}
finally
{
if(reader!= null && !reader.IsClosed )
{
reader.Close();
}
conn.Close();
}
}
------解决方案--------------------肯定是之前的连接没有关闭
------解决方案--------------------把return 0去掉.
------解决方案--------------------同意楼上的,去掉return 0,因为这个return了,导致下面的代码无法执行,导致前面运行的conn都没有关闭掉
去掉return 0,重新启动系统再看看。
------解决方案--------------------return 都返回了,不会执行后面,con没有关闭
------解决方案--------------------return 不影响finally 吧
_____________________________
刚才没看到try里面有个return,应该是问题的所在了;
RETURN
Exits unconditionally from a query or procedure.
RETURN is immediate and complete and can be used at any point to exit from a procedure, batch, or statement block. Statements following RETURN are not executed.
------解决方案--------------------你没有贴出你创建数据库连接的代码。假设它定义为:
private SqlConnection 根据数据库链接字符串创建新的连接());
不考虑业务逻辑问题,那么你的程序应该写为:
public int getDateDiff(DateTime startDate,DateTime endDate)
{
try
{
using(SqlConnection conn=根据数据库链接字符串创建新的连接())
{
conn.Open();
int DiffMonth = 0;
string sql = "select datediff(month,@startDate,@endDate) from sysusers ";
SqlCommand sqlcmd = new SqlCommand(sql,conn);
sqlcmd.Parameters.Add( "@startDate ", SqlDbType.VarChar).Value = startDate;
sqlcmd.Parameters.Add( "@endDate ", SqlDbType.VarChar).Value = endDate;