繁体   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