0
任何人都可以在下面的代碼中看到連接可能會泄露此日誌記錄到數據庫代碼的任何地方?偶爾會收到錯誤標題,但在運行此應用程序時並不總是如此。我只剩下要嘗試的事情就是包含:SqlConnection.ClearAllPools();};};處置之前。這會有助於還是導致不適當的負載?SqlConnection - 從池中獲取連接之前已經超時的時間段
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;
}
我認爲'sqlConn.Dispose()'可能會導致問題。由於close()會返回連接池的連接。處置掉了它。 – AssaultingCuccos
您正在創建一個SqlCommand實例,以僅將它扔掉,轉而使用BuildSqlCommand創建的新實例。 – Rob
Logger.instance.Fatal()是做什麼的?它是否以無限遞歸的性質創建SqlConnections? – Rob