2011-04-13 57 views
1
public DataTable RunProc(String sProcName, SqlParameter[] arrParams) 
{ 
    string sClassName = "DBAccess.RunProc"; 
    SqlConnection objSqlConnection = null; 
    try 
    { 
     objSqlConnection = (SqlConnection)OpenConnection(); 
     string sLogMessage="Executing Stored Procedure: ["+ sProcName +"] with Parameters "; 
     foreach(SqlParameter objParameter in arrParams) 
     { 
      sLogMessage+=objParameter.ParameterName+" = "; 
      sLogMessage+=objParameter.Value+" "; 
     } 

     logger.Logns(LogLevel.TraceDetail,sClassName," ",sLogMessage); 
     SqlCommand objSqlCommand = CreateCommand(sProcName, arrParams,objSqlConnection,null); 
     objSqlCommand.CommandTimeout=300; 
     SqlDataAdapter objSQLDataAdapter = new SqlDataAdapter(objSqlCommand); 
     DataSet objDataSet = new DataSet(); 
     objSQLDataAdapter.Fill(objDataSet); 
     this.CloseConnection(objSqlConnection); 

     logger.Logns(LogLevel.TraceDetail,sClassName," ","Success Executing Stored Procedure: ["+ sProcName +"]"); 

     this.CloseConnection(objSqlConnection); 
     if(objDataSet.Tables.Count>0) 
     { 
      return objDataSet.Tables[0]; 
     } 
     else 
     { 
      return null; 
     } 

     //SqlParameter p= new SqlParameter("PACCOUNTNUM", IBM.Data.DB2.DB2Type.VarChar, 17, System.Data.ParameterDirection.Input, true, ((System.Byte)(0)), ((System.Byte)(0)), "", System.Data.DataRowVersion.Current, null); 
    } 
    catch(Exception Ex) 
    { 
     logger.Logns(LogLevel.TraceDetail,sClassName," ","Error Executing Stored Procedure: ["+ Ex.ToString() +"]"); 
     this.CloseConnection(objSqlConnection); 
     throw(new Exception(Ex.ToString())); 
    } 
} 

上面提到的代碼執行成功在我們的生產環境然而,所有我們開始在我們的日誌中得到錯誤的突然錯誤上的SP ASP.NET C#執行

11/04/2011 09 :42:46 AM | TraceDetail
| DBAccess.RunProc
| |錯誤 執行存儲過程: [System.Threading.ThreadAbortException: 線程正在中止。在 SNINativeMethodWrapper.SNIPacketGetConnection在 System.Data.SqlClient.TdsParserStateObject.ReadSni(IntPtr的 分組)在 System.Data.SqlClient.TdsParserStateObject.ProcessSniPacket(IntPtr的 分組,UInt32的錯誤)(DbAsyncResult asyncResult,TdsParserStateObject stateObj)在 System.Data.SqlClient.TdsParserStateObject.ReadPacket(的Int32 bytesExpected)在 System.Data.SqlClient.TdsParserStateObject.ReadBuffer() 在 System.Data.SqlClient.TdsParserStateObject.ReadByte() 在 System.Data.SqlClient的.TdsParser.Run(RunBehavior runBeha vior,SqlCommand的cmdHandler, SqlDataReader的數據流, BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj)在 System.Data.SqlClient.SqlDataReader.ConsumeMetaData() 在 System.Data.SqlClient.SqlDataReader.get_MetaData() 在 系統。 Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader的 DS,RunBehavior runBehavior,字符串 resetOptionsString)在 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(的CommandBehavior cmdBehavior,RunBehavior runBehavior, 布爾returnStream,布爾異步)
在 System.Data.SqlClient.SqlCommand.RunExecuteReader(的CommandBehavior cmdBehavior,RunBehavior runBehavior, 布爾returnStream,字符串方法, DbAsyncResult結果)在 System.Data.SqlClient.SqlCommand.RunExecuteReader(的CommandBehavior cmdBehavior,RunBehavior runBehavior, 布爾returnStream,字符串方法)
在 System.Data.SqlClient.SqlCommand.ExecuteReader(的CommandBehavior 行爲,字符串方法)在 System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(的CommandBehavior 行爲)在 System.Data。 Common.DbCommand.System.Data.IDbComma nd.ExecuteReader(的CommandBehavior 行爲)在 System.Data.Common.DbDataAdapter.FillInternal(數據集的數據集 ,數據表[]數據表,的Int32 startRecord,的Int32最大記錄,字符串 srcTable要,IDbCommand的命令, 的CommandBehavior行爲)在 系統.Data.Common.DbDataAdapter.Fill(數據集 數據集的Int32 startRecord,的Int32 最大記錄,字符串srcTable要, IDbCommand的命令,的CommandBehavior 行爲)處 GDCIEngine System.Data.Common.DbDataAdapter.Fill(數據集 數據集) .Data.PrismDb.DBAccess。RunProc(字符串 sProcName,的SqlParameter [] arrParams)]

上面提到的代碼,其中通過表示層稱爲表示層我碰巧recive HTTP TIMEDOUT但是在後端,其中上的Web服務所使用該服務實際上是託管上述異常越來越打印,只要我做一個iisreset在後端機上每一件事情開始按預期工作這個錯誤是偶爾出現,iisreset是唯一的解決方案,我已經提出了應付在這方面任何幫助將不勝感激

謝謝 關心 Azeem

+0

如果您使用單例連接,您的代碼會有異味 - 如果2個線程打開連接會怎麼樣? ...誰先關閉它... – 2011-04-13 10:55:55

+0

附註:格式化代碼只是讓我昏昏欲睡;使用空格作爲縮進(或空格作爲製表符)。 – 2011-04-13 11:00:43

+0

OpenConnection總是返回一個新的連接,它不是一個單獨的連接。 – azimyasin 2011-04-13 11:02:49

回答

0

你得到System.Threading.ThreadAbortException異常。這是一個典型的例外caused by Response.End, Response.Redirect, or Server.Transfer

您代碼中的某些內容是代碼導致您嘗試重定向。可能是丟失的數據庫連接?

不幸的是,解決這個問題的唯一方法是調試它或嘗試自己修復它。

調試不足(因爲它是生產),您可以嘗試在整個函數中以特定間隔拋出日誌語句,以嘗試縮小問題的位置。例如

logger.Logns(LogLevel.TraceDetail,sClassName," ","Trace point 1") 
... do some stuff ... 
logger.Logns(LogLevel.TraceDetail,sClassName," ","Trace point 2") 
... do some more stuff ... 
logger.Logns(LogLevel.TraceDetail,sClassName," ","Trace point 1") 

等這可能是唯一的方法來跟蹤這一點。