SqlException捕获和处理 [英] SqlException catch and handling
问题描述
以下示例依赖于解释消息中的文本。
Eg1:如果表不存在,我有一个现有的try catch来处理。
忽略事实上,我可以检查表格是否存在于首位。
try
{
// code
}
catch(SqlException sqlEx)
{
if(sqlEx.Message.StartsWith(Invalid object name))
{
// code
}
else
throw;
}
Eg2:没有try catch显示重复键例外
if(sqlEx.Message.StartsWith(can not insert duplicate key row in object))
解决方案:开始我的SqlExceptionHelper
// - 查看错误消息列表:select * from sys.messages where language_id = 1033 order by message_id
public static class SqlExceptionHelper
{
// - 规则:以数字顺序添加错误消息,并以方法前面的数字前缀
// - 208:无效的对象名称'%。* ls'。
public static bool IsInvalidObjectName(SqlException sex)
{return(sex.Number == 208); }
// - 2601:无法使用唯一索引'%。* ls'在对象'%。* ls'中插入重复键行。重复键值为%ls。
public static bool IsDuplicateKey(SqlException sex)
{return(sex.Number == 2601); }
}
SqlException有一个<可以检查的href =http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlexception.number.aspx =noreferrer> Number属性。对于重复错误,数字是2601。
catch(SqlException e)
{
switch Number)
{
case 2601:
//做某事
break;
默认值:
throw;
}
}
从服务器获取所有SQL错误的列表,尝试这样:
SELECT * FROM sysmessages
更新
现在可以在C#6.0中简化
(e.Number == 2601)
{
//执行某些操作。
}
Q: Is there a better way to handle SqlExceptions?
The below examples rely on interpreting the text in the message.
Eg1: I have an existing try catch to handle if a table does not exist.
Ignore the fact that I could check if the table exists in the first place.
try
{
//code
}
catch(SqlException sqlEx)
{
if (sqlEx.Message.StartsWith("Invalid object name"))
{
//code
}
else
throw;
}
Eg2: without the try catch showing duplicate key exception
if (sqlEx.Message.StartsWith("Cannot insert duplicate key row in object"))
Solution: The start of my SqlExceptionHelper
//-- to see list of error messages: select * from sys.messages where language_id = 1033 order by message_id
public static class SqlExceptionHelper
{
//-- rule: Add error messages in numeric order and prefix the number above the method
//-- 208: Invalid object name '%.*ls'.
public static bool IsInvalidObjectName(SqlException sex)
{ return (sex.Number == 208); }
//-- 2601: Cannot insert duplicate key row in object '%.*ls' with unique index '%.*ls'. The duplicate key value is %ls.
public static bool IsDuplicateKey(SqlException sex)
{ return (sex.Number == 2601); }
}
The SqlException has a Number property that you can check. For duplicate error the number is 2601.
catch (SqlException e)
{
switch (e.Number)
{
case 2601:
// Do something.
break;
default:
throw;
}
}
To get a list of all SQL errors from you server, try this:
SELECT * FROM sysmessages
Update
This can now be simplified in C# 6.0
catch (SqlException e) when (e.Number == 2601)
{
// Do something.
}
这篇关于SqlException捕获和处理的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!