2012-04-30 120 views
0

我有一個SQL異常發生在客戶端的生產服務器上(我沒有什麼權利)。跟蹤一個SQL異常

我不能在本地複製問題,但有沒有什麼好的方法來弄清楚什麼樣的sql異常被調用以及哪些sql?我可以重新部署並有權更改源代碼。

我的堆棧跟蹤是這樣的:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below. 

Stack Trace: 
[SqlException (0x80131904): ] 

System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) +1950954 
System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) +4846939 
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) +194 
System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) +2392 
System.Data.SqlClient.SqlDataReader.CloseInternal(Boolean closeReader) +169 
System.Data.SqlClient.SqlDataReader.Close() +96 
System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) +292 
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) +954 
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) +162 
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) +32 
System.Data.SqlClient.SqlCommand.ExecuteScalar() +139 
Output.RunTable(String outputType, String _outputDataType) +1106 
Output.ProcessPage() +33 
Output.Page_Load(Object sender, EventArgs e) +6466 
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +14 
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +35 
System.Web.UI.Control.OnLoad(EventArgs e) +99 
System.Web.UI.Control.LoadRecursive() +50 
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +627 
+0

我認爲異常信息,它的內部例外消息可以幫助你很多... – gdoron

+0

我如何知道從哪裏獲取異常消息? – cdub

+0

從SQL Server返回的錯誤消息位於SqlException的內部異常的*內部異常*(深度3級)中......所以您需要使用'exception.GetBaseException()。Message'來獲取SQL服務器錯誤。 –

回答

4

嘗試使用下面的方法來收集有關的異常(從MSDN article採取)的更多信息:

try 
    { 
     command.Connection.Open(); 
     command.ExecuteNonQuery(); 
    } 
    catch (SqlException ex) 
    { 
     for (int i = 0; i < ex.Errors.Count; i++) 
     { 
      errorMessages.Append("Index #" + i + "\n" + 
       "Message: " + ex.Errors[i].Message + "\n" + 
       "LineNumber: " + ex.Errors[i].LineNumber + "\n" + 
       "Source: " + ex.Errors[i].Source + "\n" + 
       "Procedure: " + ex.Errors[i].Procedure + "\n"); 
     } 
     Console.WriteLine(errorMessages.ToString()); 
    } 
+0

謝謝我正在尋找這樣的幫助:) – cdub