捕获异常并保存到 SQL Server
本文关键字:SQL Server 保存 捕获异常 | 更新日期: 2023-09-27 18:32:04
我正在捕获异常,我想将其写入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();
上放置断点,然后切换到 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,你也许可以更好地发现出了什么问题。