【发布时间】:2013-07-08 15:42:59
【问题描述】:
我们有将异常记录到我们的数据库中的错误处理。一个错误正在记录,它只是一个 SQL Server 列名,仅此而已。我们记录的错误是与内部异常连接的异常消息。所以我们希望看到这种异常和更多细节,但我们看到的只是ProblemField
我们在 .Net 2.0 框架上使用 C# 编写代码,并使用 SQL Server 2005 作为数据库。
这是代码,以及我注意到的问题。
using (SqlCommand cmd = new SqlCommand("MyStoredProcedure", connection))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@PARAM1", var1);
cmd.Parameters.AddWithValue("@PARAM2", var2);
cmd.Parameters.AddWithValue("@PARAM3", var3);
using (SqlDataReader rdr = cmd.ExecuteReader())
{
if (rdr.HasRows)
{
rdr.Read();
var4 = (double)rdr["ProblemField"];
var5 = (double)rdr["OtherField"];
}
else
{
var4 = var5 = 0.0;
}
}
}
我将rdr["ProblemField"] 和rdr["OtherField"] 的这些读取改为使用Double.TryParse。
选择MyStoredProcedure:
SELECT TOP 1 [anbrID]
,[col1]
,[col2]
,[col3]
,COALESCE([ProblemField], 0.0)
,COALESCE([OtherField], 0.0)
,[col6]
FROM MyTable
WHERE (col1=@PARAM1 OR
CAST(@PARAM2 AS int) between CAST(col2 AS int) and CAST(col3 AS int)) AND
col6 =@PARAM3
ORDER BY id DESC
我已将这些 COALESCEs 更改为也有一个 as “ProblemField”等。
底线:这种异常信息正常吗?对于这样一个模糊的错误,我的修复是否合理?
【问题讨论】:
-
您没有显示记录异常的位置。可能您刚刚记录了字段名称。显示记录异常的行
-
我们使用的异常日志记录在我们所有的项目中都是相同的,这是我们唯一一次看到这个我记得。它接受一个异常对象并使用 exception.Message + " - " + excption.InnerException
-
您可能应该单步执行这段代码,看看实际发生了什么。我猜没有找到列名或其他。
-
您可能还需要查看您的异常的
.InnerException!这些通常包含非常有价值的附加信息! (并且可以嵌套多层) -
您应该至少记录外部异常的类型,最好记录 exception.ToString(),其中包括任何内部异常、堆栈跟踪和其他有用的数据。我怀疑外部异常是您自己生成的用于包装内部 SqlException 的异常。
标签: c# sql-server-2005 exception stored-procedures .net-2.0