簡體   English   中英

System.Threading.ThreadAbortException錯誤

[英]System.Threading.ThreadAbortException error

我有一個將調用SaveEmployee()函數的SaveEmployee()方法。

WebMethod功能如下:

[WebMethod]
public bool UpdateEmployee(DataSet dSet)  
{
  try
  {
     COMAccess.Employee.SaveEmployee(Registry.GetDatabaseConnection(),dSet)
  } 
  catch (Exception ex) 
  {
    Log(ex.InnerException.ToString()
  }
}   

SaveEmployee()函數如下:

public static bool SaveEmployee(string connection, DataSet dSet)
{
  bool rtnVal = false;
  SqlConnection  conn = new SqlConnection(connection);
  conn.Open();
  SqlTransaction tran = conn.BeginTransaction();
  SqlCommand command = conn.CreateCommand();
  command.Connection = conn;
  command.Transaction = tran;
  command.CommandTimeout = 320;
  command.CommandText = "SP_UPDATE_EMPLOYEE";
  command.CommandType = System.Data.CommandType.StoredProcedure;

  try 
  {
     foreach(System.Data.DataRow dRow in dSet.Tables["Employee"].Rows)
     {
        command.Parameters.Add("@EmployeeID", SqlDbType.Int).Value = dRow["EmployeeID"];
        command.Parameters.Add("@EmployeeName ", SqlDbType.VarChar).Value = dRow["EmployeeName"];
        command.ExecuteNonQuery(); 
        command.Parameters.Clear();             
     }
     tran.Commit();
     myVal = true;    
  }
  catch (Exception ex)
  {
     tran.Rollback();
     myVal = false;
  }
     return myVal;
  }

無論如何,我收到以下InnerException消息:

System.Threading.ThreadAbortException: Thread was being aborted.
at SNINativeMethodWrapper.SNIPacketGetConnection(IntPtr packet)
at System.Data.SqlClient.TdsParserStateObject.ProcessSniPacket(IntPtr packet, UInt32 error)
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 COMAccess.Employee.SaveEmployee(String connection, DataSet dSet)

我不知道發生了什么事。 有人可以啟發我嗎? 謝謝

在您的代碼中,將CommandTimeout屬性設置為320秒:

command.CommandTimeout = 320;

但是,您的連接仍然具有等於30秒的默認超時,並且在該時間過去之后,該命令的內部線程將被取消,因為它正在長時間運行。

您必須為ConnectionTimeout設置ConnectionTimeout屬性,如下所示:

connection.ConnectionTimeout = 320;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM