我的问题是如何处理c#中的sql异常,有没有办法检查一下数据访问层抛出了什么样的sql异常?例如,如果db抛出唯一约束异常或外键异常,有没有办法从c#捕获它?对于这些数据库异常,您使用的异常处理模式是什么?
发布于 2009-11-03 12:07:25
看一看documentation of the SqlException类,特别是它的properties:例如,SqlException.Number
应该允许您识别哪种类型的SqlException (唯一约束、外键等)。发生了。
您可以使用筛选的异常来捕获特定的错误。VB.NET:
Try
...
Catch ex as SqlException When ex.Number = ...
...
Catch ex as SqlException When ex.Number = ...
...
End Try
C# (版本6及以上):
try
{
...
}
catch (SqlException ex) when (ex.Number == ...)
{
...
}
catch (SqlException ex) when (ex.Number == ...)
{
...
}
发布于 2009-11-03 12:04:32
您可以检查消息文本,编号,并在其上进行大小写切换,以了解错误...
try {
}
catch (SqlException ex)
{
string str;
str = "Source:"+ ex.Source;
str += "\n"+ "Number:"+ ex.Number.ToString();
str += "\n"+ "Message:"+ ex.Message;
str += "\n"+ "Class:"+ ex.Class.ToString ();
str += "\n"+ "Procedure:"+ ex.Procedure.ToString();
str += "\n"+ "Line Number:"+ex.LineNumber.ToString();
str += "\n"+ "Server:"+ ex.Server.ToString();
Console.WriteLine (str, "Database Exception");
}
发布于 2009-11-03 12:07:43
这取决于异常和您的数据库后端。您的数据库将为特定的内容(如约束、权限等)生成唯一的错误代码,但该错误代码在不同的数据库中有所不同。甲骨文有一个庞大的pdf (2000+ pages),其中列出了它可能抛出的每一个可能的错误,我相信Sqlserver也有类似的东西。我的观点是,你需要寻找特定的错误代码,然后你需要对catch部分中的那些代码进行trp,并以不同的方式处理它们,而不是你可以得到的大量其他错误。
https://stackoverflow.com/questions/1666887
复制相似问题