Ошибка при выполнении SP ASP.NET C # - PullRequest
1 голос
/ 13 апреля 2011
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()));
    }
}

Вышеупомянутый код успешно выполняется в нашей рабочей среде, однако внезапно мы начинаем получать ошибку в наших журналах

11.04.2011 09:42:46 | TraceDetail
| DBAccess.RunProc
| | Ошибка Выполнение хранимой процедуры: [System.Threading.ThreadAbortException: Тема была прервана. в SNINativeMethodWrapper.SNIPacketGetConnection (IntPtr пакет) в System.Data.SqlClient.TdsParserStateObject.ProcessSniPacket (IntPtr пакет, ошибка UInt32) в System.Data.SqlClient.TdsParserStateObject.ReadSni (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 runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) в System.Data.SqlClient.SqlDataReader.ConsumeMetaData () в System.Data.SqlClient.SqlDataReader.get_MetaData () в System.Data.SqlClient.SqlCommand.FinishExecuteReader (SqlDataReader ds, RunBehavior, runBehavior, String resetOptionsString) в System.Data.SqlClient.SqlCommand.RunExecuteReaderTds (CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
в System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, метод String, Результат DbAsyncResult) в System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, метод String)
в System.Data.SqlClient.SqlCommand.ExecuteReader (CommandBehavior поведение, метод String) в System.Data.SqlClient.SqlCommand.ExecuteDbDataReader (CommandBehavior поведение) в System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader (CommandBehavior поведение) в System.Data.Common.DbDataAdapter.FillInternal (DataSet набор данных, DataTable [] datatables, Int32 startRecord, Int32 maxRecords, строка srcTable, команда IDbCommand, Поведение CommandBehavior) в System.Data.Common.DbDataAdapter.Fill (DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, Команда IDbCommand, CommandBehavior поведение) в System.Data.Common.DbDataAdapter.Fill (DataSet dataSet) в GDCIEngine.Data.PrismDb.DBAccess.RunProc (String sProcName, SqlParameter [] arrParams)]

Вышеупомянутый код используется в веб-сервисе, который вызывается уровнем представления на уровне представления. Я получаю тайм-аут HTTP, однако в бэкэнде, где служба фактически размещается, указанное выше исключение печатается, как только я Выполняйте iisreset на бэкэнд-машине, каждая вещь начинает работать, как и ожидалось, эта ошибка время от времени появляется, и iisreset - единственное решение, которое я нашел, чтобы справиться с ним, любая помощь в этом отношении будет высоко оценена

Спасибо С уважением Азим

1 Ответ

0 голосов
/ 18 августа 2011

Вы получаете исключение System.Threading.ThreadAbortException.Это классическое исключение , вызванное Response.End, Response.Redirect или 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")

и т. д.Это может быть единственный способ отследить это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...