2011-10-30 51 views
3

我希望获得来自以下错误消息异常的UI获得的显示自定义消息到一个粒度级别如何操纵SQLEXCEPTION消息到用户友好的消息

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

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

我可以观察

%ls正在UPDATE取代,FOREIGN KEY

在C#中我会越来越偏离我想提取由SQL Server更换的部件的错误消息。我将在我的库中维护SqlErrors,并将用自定义消息替换它们。

自定义消息我想显示 例如。

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

如果你有复合外键,你可能不能够寄托在一个特定的列问题。 –

+0

你在正确的轨道上,使用正则表达式来匹配所需的字段。创建一个全局的异常处理机制,将SQL异常转换为您的自定义异常(即ASP.NET中的Application_Error等) –

+0

@MartinSmith:我发现了您的提示。我接受任何建议。我期望在假设的基础上得到答案,例如。我的数据库将永远不会包含复合外键(在我的情况下不是这样)。那我该怎么做呢.. –

回答

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

相关问题