2009-12-12 106 views
2

我有一個.aspx頁面調用.asmx頁面的Web服務。在那個.net Web服務中,我試圖打開到SQLServer 2008的數據庫連接。連接失敗。我不知道爲什麼。我在try/catch中執行此操作,並在調試時碰到catch。我不知道我可以在那裏輸出什麼,但我無法訪問服務器的文件系統來編寫日誌文件。從SQLException錯誤輸出異常

我發現了這個帖子:

try 
{ 
    SqlCommand cmd = 
     new SqlCommand("raiserror('Manual SQL exception', 16, 1)",DBConn); 
    cmd.ExecuteNonQuery(); 
} 
catch (SqlException ex) 
{ 
    string msg = ex.Message; // msg = "Manual SQL exception" 
} 

在這裏,它可能會爲我做的伎倆,但我不知道如何使msg字符串輸出到調用該Web服務的頁面?有沒有辦法通過讓調用頁面實現相同的異常處理程序來將它傳播到異常鏈?

感謝// :)

+0

感謝您的編輯標記,它幫助:) – Spanky

回答

3

你應該能夠捕獲的SQL異常的specifc型和閱讀特定的錯誤消息:

try{ 
    ... 
} 
catch(SQLException sqlex) 
{ 
    /// do some work here with sqlex.Message 
} 
catch(Exception ex) 
{ 
    /// this will trap any other 'type' of exception incase a sqlex is not thrown. 
} 

然後,您可以拋出此「堆棧向上」,這意味着會發回的方法,所謂的失敗代碼:

catch(SQLException sqlex) 
    { 
     throw sqlex; 
    } 

或者你可以基於SQL的異常拋出一個新的消息:

catch (SQLException sqlex) 
    { 
    throw new Exception("My method threw an exception in SQL:" + sqlex.Message); 
    } 

所有這些方法都允許您將消息堆棧發送回調用SQL的客戶端。這是你應該給你留言的地方。

+0

這就是我以後,真棒!謝謝// :) – Spanky

1

如果設置在web.config中則異常的詳細信息將在瀏覽器中顯示如下。

<customErrors mode="off" /> 

或者你可以嘗試安裝ELMAH,這是非常容易設置,並且可以配置來記錄的異常的詳細信息在內存中。

+0

好主意,我會檢查看到的狀態。謝謝// :) – Spanky

1

您可以啓用跟蹤頁面或應用程序,然後執行:

Trace.Write ("This is my exception:\n" + exception.ToString()); 

然後去http://yourhost/Trace.axd,你將能夠看到的輸出。

+0

很酷,謝謝// :) – Spanky

0

既然你說你可以調試,(假設你可以更改代碼),爲什麼不去做一個:

string strEx = Ex.ToString(); //Ex is the caught exception. 

然後,只需將STREX數據從Visual Studio IDE監視窗口複製/展示臺&然後使用數據。

1

如果你能訪問調試器,你也可以在你的catch語句做

Debug.WriteLine(ex.Message) 

這會將錯誤寫入輸出窗口。

+0

不錯,我會嘗試。謝謝 // :) – Spanky