我們有一個應用程序在整個運行過程中調用幾次存儲過程數千次。該應用程序使用以下SQLLogger對象作爲日誌記錄機制。也就是說該對象被實例化一次,並且每次執行後調用WriteLogLine方法。我們最近更改了代碼以在多個線程上運行。一旦我們達到五以上,我們會得到以下錯誤。我已經嘗試了幾件事,但還沒有找到解決方案。任何幫助,你可以提供將不勝感激 謝謝連接當前狀態如何關閉,如果它尚未關閉
System.InvalidOperationException:ExecuteNonQuery需要一個開放和可用的連接。連接的當前狀態已關閉。 (String method, at System.Data.SqlClient.SqlCommand.ValidateCommand(String method,Boolean async) ) at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result,String methodName,Boolean sendToPipe) at System.Data.SqlClient.SqlCommand.ExecuteNonQuery() at SQLLogger.WriteLogLine(String LogEntry,String methodName,String jobID, Boolean CustomerNotification,Nullable`1 iQuantity) at MainModule.Main()
string ApplicationName;
Guid AppRunid;
SqlConnection db;
public SQLLogger(string _ApplicationName, Guid _AppRunID,string LogDbConnectionString)
{
ApplicationName = _ApplicationName;
AppRunid = _AppRunID;
db = new SqlConnection(LogDbConnectionString);
db.Open();
}
public void WriteLogLine(string LogEntry ,string methodName,string jobID =null,Boolean CustomerNotification=false,int? iQuantity=null)
{
SqlCommand SQL = new SqlCommand("LogApplicationEvent", db);
SQL.CommandType = CommandType.StoredProcedure;
SQL.Parameters.AddWithValue("@appName", ApplicationName);
SQL.Parameters.AddWithValue("@message", LogEntry);
SQL.Parameters.AddWithValue("@jobID", jobID);
SQL.Parameters.AddWithValue("@AppRunID", AppRunid);
SQL.Parameters.AddWithValue("@CustomerMessage", CustomerNotification);
SQL.Parameters.AddWithValue("@MethodName", methodName);
SQL.Parameters.AddWithValue("@Quantity", iQuantity);
SQL.ExecuteNonQuery();
Console.WriteLine(String.Format(DateTime.Now.ToString(), "yyyy/MM/dd HH:mm:ss") + " " + LogEntry +" "+jobID+" "+ iQuantity.ToString());
}
具有線程安全性的單線圖案就是您要查找的內容 – Miller