【发布时间】:2013-03-28 17:07:07
【问题描述】:
我在 asp.net 3.5 中有一个应用程序,数据库是 Sql server 2005。
"Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached."
有时出现这个错误如何解决这个错误..
我尝试SqlConnection.ClearAllPools();,但这也不起作用。
SqlCommand cmdToExecute = new SqlCommand();
cmdToExecute.CommandText = "dbo.[sp_user_listing]";
cmdToExecute.CommandType = CommandType.StoredProcedure;
DataTable toReturn = new DataTable("courier_user_listing");
SqlDataAdapter adapter = new SqlDataAdapter(cmdToExecute);
// Use base class' connection object
cmdToExecute.Connection = sqMainConnection;
try
{
cmdToExecute.Parameters.Add(new SqlParameter("@suser_name", SqlDbType.VarChar, 250, ParameterDirection.Input, true, 0, 0, "", DataRowVersion.Proposed, _user_name));
if (blnMainConnectionIsCreatedLocal)
{
// Open connection.
sqMainConnection.Open();
}
else
{
if (CPMainConnectionProvider.IsTransactionPending)
{
cmdToExecute.Transaction = CPMainConnectionProvider.CurrentTransaction;
}
}
// Execute query.
adapter.Fill(toReturn);
i32ErrorCode = (Int32)cmdToExecute.Parameters["@iErrorCode"].Value;
if (i32ErrorCode != (int)LLBLError.AllOk)
{
// Throw error.
throw new Exception("Stored Procedure 'sp_courier_user_SelectAll' reported the ErrorCode: " + i32ErrorCode);
}
return toReturn;
}
catch (Exception ex)
{
// some error occured. Bubble it to caller and encapsulate Exception object
throw new Exception("Courier_user::SelectAll::Error occured.", ex);
}
finally
{
if (blnMainConnectionIsCreatedLocal)
{
// Close connection.
sqMainConnection.Close();
}
cmdToExecute.Dispose();
adapter.Dispose();
}
【问题讨论】:
-
“超时。” - 在假设您已经达到最大连接数之前,我可以想到很多超时的原因......
-
@MitchWheat - 没错,只有错误消息清楚地表明了最大连接数。
-
@DoanCuong 要求的是查看您如何打开和关闭连接。如果你没有正确关闭它们,你很容易导致连接池饥饿。
-
@Oded:是的,但是我在 .NET 和数据库方面做了很多工作,我还没有看到那个错误......
-
@Harshit - 请发布您的代码。如果没有看到您在做什么,我们无法给您具体的建议。
标签: c# asp.net sql-server