如何从SQLException获取确切的“约束名称”

时间:2014-10-17 12:10:25

标签: c# asp.net .net sql-server

有没有办法获得确切的"约束名称" \"索引名称"来自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;
   }
 }

2 个答案:

答案 0 :(得分:3)

使用约束的命名约定,例如将这些命名为始终包含下划线,如FK_XxxUQ_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,但没有   解析“消息属性”的文本?

不,没有这种方式。