0

我目前正在我的 C# asp.net 页面上使用 SQL。我在数据库中插入了一个值,但是如果 ID 重复,我会得到这个异常:

{"违反 PRIMARY KEY 约束 'PK_Section'。无法在对象 'dbo.Section' 中插入重复键。\r\n语句已终止。"}

我想要做的是处理异常,如下所示:

  if(exception=={"Violation of PRIMARY KEY constraint 'PK_Section'. Cannot insert duplicate key in object 'dbo.Section'.\r\nThe statement has been terminated."})
  //update values instead of insert

我的问题是我无法将异常(这是一个字符串)与尝试复制 ID 时得到的那个长“字符串”进行比较。

无论如何我可以比较这个,以便我可以正确地解决这个错误?

4

2 回答 2

3

我会使用 try catch 块来检查 SqlException。像这样的东西:

 private bool SaveDocument()
 {
        bool saved = false;
        try
        {
            Save();
            saved = true;
        }
        catch (Exception ex)
        {
           string errorTitle = Resources.SaveErrorCaption;
           string errorText = Resources.SaveErrorText;
           Exception initialEx = ex;
            while (ex.InnerException != null)
            {
                if (ex.InnerException is SqlException)
                {
                    int errorNo = ((SqlException)ex.InnerException).Number;

                    if (errorNo == 2627)
                    {
                        errorTitle = Resources.DuplicateEntryErrorTitle;
                        errorText = Resources.DuplicateEntryErrorMessage;
                    }
                }
                ex = ex.InnerException;
            }
            MsgBox.Show(errorTitle, errorText,
                string.Format("{0}{1}StackTrace:{1}{2}", initialEx.Message, Environment.NewLine, initialEx.StackTrace),
                MsgBoxButtons.OK, MsgBoxImage.Error);
        }
         return saved;
}
于 2013-08-28T10:30:10.370 回答
3

您应该捕获SqlException(可能是您的异常的 InnerException)并检查其Number属性以识别异常。

请参阅http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlexception.number.aspx

于 2013-08-28T10:23:48.910 回答