有没有办法获得确切的"约束名称" \"索引名称"来自C#" Microsoft SQL Exception",错误号2601或2627,但没有解析" Message属性的文本"?
例如:
catch (SqlException e)
{
switch (e.Number)
{
case 2601:
/* Here i want to know the constraint name in case i have
more than one on a specific table, so i will be able to
display the correct error message to the user.
For example:
case IX_Username:
throw new Exception("Username duplication")
case IX_PhoneNumber:
throw new Exception("PhoneNumber duplication")
*/
break;
default:
throw;
}
}
答案 0 :(得分:3)
使用约束的命名约定,例如将这些命名为始终包含下划线,如FK_Xxx
或UQ_Xxx
,然后使用正则表达式解析此类名称的错误
var match = Regex.Matches("Foreign key FK_Xxx violation.", @"\b\w*_\w*\b")
.Cast<Match>().FirstOrDefault();
return match != null ? match.Value : null;
答案 1 :(得分:1)
有没有办法从C#中获取确切的“约束名称”\“索引名称” “Microsoft SQL异常”,错误号2601或2627,但没有 解析“消息属性”的文本?
不,没有这种方式。