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
如果您使用單例連接,您的代碼會有異味 - 如果2個線程打開連接會怎麼樣? ...誰先關閉它... – 2011-04-13 10:55:55
附註:格式化代碼只是讓我昏昏欲睡;使用空格作爲縮進(或空格作爲製表符)。 – 2011-04-13 11:00:43
OpenConnection總是返回一個新的連接,它不是一個單獨的連接。 – azimyasin 2011-04-13 11:02:49