如果我嘗試執行> 100的數據庫使用控制檯應用程序中的線程一次插入一個數據庫,則會出現以下錯誤。按照當前的體系結構,我需要一次插入一條記錄。對於較少數量的記錄(10-30),錯誤不會發生。一次插入這麼多的記錄是否會造成這個問題?多個數據庫插件上的控制檯應用程序上的ThreadAbortException
的代碼是一樣的東西:
foreach (MyObject myObject in myObjectCollection)
{
var database = new SqlDatabase(connectionString);
using (DbCommand command = database.GetStoredProcCommand(storedProcedureName))
{
// Create parameters from myObject
// Add parameters to the command object
database.ExecuteNonQuery (command);
}
}
錯誤:
System.Threading.ThreadAbortException: Thread was being aborted.
at SNIReadSync(SNI_Conn* , SNI_Packet** , Int32)
at SNINativeMethodWrapper.SNIReadSync(SafeHandle pConn, IntPtr& packet, Int32 timeout)
at System.Data.SqlClient.TdsParserStateObject.ReadSni(DbAsyncResult asyncResult, TdsParserStateObject stateObj)
at System.Data.SqlClient.TdsParserStateObject.ReadNetworkPacket()
at System.Data.SqlClient.TdsParserStateObject.ReadBuffer()
at System.Data.SqlClient.TdsParserStateObject.ReadByte()
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)
at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
at Microsoft.Practices.EnterpriseLibrary.Data.Database.DoExecuteNonQuery(DbCommand command)
at Microsoft.Practices.EnterpriseLibrary.Data.Database.ExecuteNonQuery(DbCommand command)
您妥善處理,你可能會被清空連接池的連接。 –
@Ben,所有數據庫調用都使用相同的連接對象。這會造成這種情況嗎? – user1052927
@ user1052927:如果您重複使用相同的連接,當然。嘗試將連接放在'使用'塊 – Icarus