【发布时间】:2015-03-24 08:31:39
【问题描述】:
我想询问有关连接超时的问题,因为我遇到了问题。 错误是
“超时。在从池中获取连接之前已经过了超时时间。这可能是因为所有池连接都在使用中并且达到了最大池大小。”
这样的代码会导致连接超时吗? 调用连接的最佳做法是什么?
using (var cnn = OpenExternalContractor()) //call connection string
{
var query = @"insert into interfaceRequest (requestNo,requestAssemblyName,requestApplicationName,requestFunctionName,
requestParameters,requestUserName,requestUserMail,requestDate)
values (@requestNo,@requestAssemblyName,@requestApplicationName,@requestFunctionName,
@requestParameters,@requestUserName,@requestUserMail,getDate())";
cnn.Execute(query, new
{
requestNo = requestNo,
requestAssemblyName = requestAssemblyName,
requestApplicationName = jobName.Split('-')[0],
requestFunctionName = jobName.Split('-')[1],
requestParameters = requestParameters,
requestUserName = requestUserName.Replace("\"", "\\"),
requestUserMail = userMail
});
//Call another function here that call connection string
PersonnelRepository.UpdateLastNumber(requestNamePrefix, Convert.ToInt32(lastNumber));
}
public static void UpdateLastNumber(string type, int value)
{
using (var cnn = OpenExternalContractor()) //Call connection string
{
var query = "update AutoNumber set LastNumber = " + value + " where Type = '" + type + "'";
cnn.Query<int>(query);
}
}
这里是连接字符串的代码:
protected static IDbConnection OpenExternalContractor()
{
IDbConnection dbConnection = new SqlConnection(WebConfigurationManager.ConnectionStrings["ExternalContractor"].ConnectionString);
dbConnection.Open();
return dbConnection;
}
谢谢,
【问题讨论】:
-
我会使用
SqlCommand而不是使用连接。然后您可以为命令设置Timeout。 -
感谢您的回复,这个错误正常吗??也许它是由连接泄漏引起的?如果我指定超时,以后会不会再次出现这个错误??
-
取决于查询的执行时间。默认超时为 30 秒。您可以在
ConnectionString中修改它。 -
谢谢,我会试试你的建议
标签: c# connection-pooling connection-timeout