簡體   English   中英

捕獲異常並保存到SQL Server

[英]Catch exception and save to SQL Server

我正在捕獲異常,我想將其寫入SQL Server,但我的程序不寫...

我沒有收到任何錯誤,但在SQL Server中我沒有發現任何東西......

catch (Exception f)
{ 
    String error = f.ToString();
    SqlConnection konekt = new SqlConnection(connectionstring);

    SqlCommand prikaz = new SqlCommand("insert into ERROR_LOG (ULOHA, OPERACE, POPIS, MESSAGE, DATUM) values ('3', '3', 'Chyba v ExportNOHEL', @error, @datum)", konekt);
    konekt.Open();
    prikaz.Parameters.AddWithValue("@error", error);
    prikaz.Parameters.AddWithValue("@datum", DateTime.Now);

    prikaz.ExecuteNonQuery();

    konekt.Close();
 }

你知道問題在哪里嗎?

如果您沒有收到任何錯誤,並且您100%確定您確實正在寫入正確的數據庫,則可能是您有環境事務,例如TransactionScope (正在回滾您的事務)

檢查這個的方法是在konekt.Close();上放置一個斷點konekt.Close(); 然后切換到SQL查詢分析器並執行

select * from error_log (NOLOCK) 

查看日志是否存在。 如果是,然后在繼續代碼時回滾,則可以按如下方式禁止環境事務:

        using (new TransactionScope(TransactionScopeOption.Suppress))
        using (var konekt = new SqlConnection(connectionstring))
        using (var prikaz = new SqlCommand("insert into ERROR_LOG (ULOHA, OPERACE, POPIS, MESSAGE, DATUM) values ('3', '3', 'Chyba v ExportNOHEL', @error, @datum)", konekt))
        {
           konekt.Open();
           prikaz.Parameters.AddWithValue("@error", "ASASAS");
           prikaz.Parameters.AddWithValue("@datum", DateTime.Now);
           prikaz.ExecuteNonQuery();
           konekt.Close();
        }

根據您擁有的數據類型,如果error太大,數據可能會被截斷。 這可能有所幫助:

字符串或二進制數據將被截斷SQL錯誤

雖然你所做的事情看起來沒有任何錯誤,但是將SQL語句硬編碼到c#中會使調試變得困難,我建議在數據庫中為此創建一個新的存儲過程,然后你可以更好地監控動作,通過在存儲過程中創建一個正確的try catch,您可以更好地發現出錯的地方。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM