![](/img/trans.png)
[英]ASP - the timeout period elapsed prior to obtaining a connection from the pool
[英]SqlConnection - The timeout period elapsed prior to obtaining a connection from the pool
谁能在下面的代码中的任何地方看到可能为此日志记录到数据库代码而泄漏的连接? 运行此应用程序时,偶尔但并非总是出现标题错误。
我剩下的唯一尝试是包含:SqlConnection.ClearAllPools(); 在处置之前。 这会有所帮助还是造成不必要的负担?
private void InsertToDb(EventLogDto e, string connectionString)
{
var cmd = new SqlCommand();
using (var sqlConn = new SqlConnection(connectionString))
{
try
{
// Open the connection.
sqlConn.Open();
// Build the SqlCommand object
cmd = BuildSqlCommand(e, sqlConn);
// Execute the Stored Proc.
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
Logger.Instance.Fatal(ex);
}
finally
{
sqlConn.Close();
sqlConn.Dispose();
}
}
}
其中BuldSqlCommand(e,sqlConn); 是:
private SqlCommand BuildSqlCommand(EventLogDto e, SqlConnection sqlConn)
{
var cmd = new SqlCommand
{
CommandText = "dbo.InsertEventLog",
CommandType = CommandType.StoredProcedure,
Connection = sqlConn
};
InsertValue(cmd.Parameters, "@EventId", e.EventId);
InsertValue(cmd.Parameters, "@DateCreated", e.EventDate);
InsertValue(cmd.Parameters, "@Severity", e.Severity);
InsertValue(cmd.Parameters, "@Message", e.Message);
InsertValue(cmd.Parameters, "@Source", e.Source);
InsertValue(cmd.Parameters, "@TargetSite", e.TargetSite);
InsertValue(cmd.Parameters, "@StackTrace", e.StackTrace);
return cmd;
}
试试这个,看看是否有帮助。
try {
using (var sqlConn = new SqlConnection(myConnectionString)) {
using (SqlCommand cmd = sqlConn.CreateCommand()) {
sqlConn.Open();
AttachParameters(cmd, e);
cmd.ExecuteNonQuery();
}
}
} catch (Exception ex) {
Logger.Instance.Fatal(ex);
}
如果它仍然发生,我猜可能是因为Fatal()。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.