如何将SqlException消息操作为用户友好消息

时间:2011-10-30 11:07:33

标签: c# sql-server exception-handling

我想从UI上获取的错误消息中获取以下异常中的所有替换值,以显示自定义消息到粒度级别

  

UPDATE语句与FOREIGN KEY约束“FK_Parameter_Status”冲突。冲突发生在数据库“LIMS”,表中   “dbo.Status”,列'StatusId'。

     

%ls语句与%ls约束“%。* ls”冲突。冲突发生在数据库“%。* ls”,表“%。* ls”%ls%。* ls%ls。

我可以观察

%ls正在被UPDATEFOREIGN KEY等替换。

在C#中,我将收到错误消息,我想从中提取由SQL Server替换的部分。我将在我的库中维护SqlErrors并将其替换为自定义消息。

我要显示的自定义消息 例如。

string.Format("{0} failed!, incorrect value was supplied for {1} field", "UPDATE", "Status")

1 个答案:

答案 0 :(得分:2)

SQLException具有Number属性,您可以使用此数字然后翻译成您想要的任何文本。

public static string GetSqlExceptionMessage(int number)
{
  //set default value which is the generic exception message
  string error = MyConfiguration.Texts.GetString(ExceptionKeys.DalExceptionOccured);   
  switch (number)
  {
    case 4060:
      // Invalid Database
      error = MyConfiguration.Texts.GetString(ExceptionKeys.DalFailedToConnectToTheDB);   
    break;
    case 18456:
      // Login Failed
      error = MyConfiguration.Texts.GetString(ExceptionKeys.DalFailedToLogin);   
    break;
    case 547:
      // ForeignKey Violation
      error = MyConfiguration.Texts.GetString(ExceptionKeys.DalFKViolation);   
    break;
    case 2627:
      // Unique Index/Constriant Violation
      error = MyConfiguration.Texts.GetString(ExceptionKeys.DalUniqueConstraintViolation);
    break;
    case 2601:
      // Unique Index/Constriant Violation
      error =MyConfiguration.Texts.GetString(ExceptionKeys.DalUniqueConstraintViolation);   
    break;
    default:
      // throw a general DAL Exception
      MyConfiguration.Texts.GetString(ExceptionKeys.DalExceptionOccured);   
    break;
  }

  return error;
}

示例代码副本来自:Get SqlException friendly messages using its Error Number