1

我遇到了一个异常,我想把它写到 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();
 }

你知道问题出在哪里吗?

4

3 回答 3

3

如果您没有收到任何错误,并且您 100% 确定您确实正在写入正确的数据库,那么可能是您有一个环境事务,例如TransactionScope(正在回滚您的事务)

检查这一点的一种方法是放置一个断点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();
        }
于 2013-09-19T14:21:43.127 回答
1

根据您拥有的数据类型,如果数据error太大,可能会被截断。这可能会有所帮助:

字符串或二进制数据将被截断 SQL 错误

于 2013-09-19T14:38:00.190 回答
0

尽管你所做的事情看起来没有任何问题,将 SQL 语句硬编码到 c# 中确实很难调试,我建议为此在数据库中创建一个新的存储过程,然后你可以更好地监控操作,通过在存储过程中创建适当的 try catch,您也许可以更好地发现问题所在。

于 2013-09-19T14:55:13.107 回答