Dot-Net

在 .NET 中擷取 SQL 唯一鍵異常

  • May 5, 2011

我想知道除了解析錯誤消息之外,是否有人有更優雅的方法來檢查 .NET 中 SQL 的唯一鍵異常?現在我在 SQL 中呼叫儲存過程,然後在 .NET 中使用 try catch 塊。在 try catch 塊中,我解析錯誤消息,這是一個唯一鍵錯誤,我將自定義錯誤的實例拋出給呼叫類,如果不是,我只是將原始異常拋出呼叫類。這對我來說似乎非常低效。

如果您擷取到 SqlException,您應該能夠列舉包含許多“SqlError”對象的“Errors”集合。

SqlError 具有“Class”和“Number”等屬性 - 唯一鍵違規是 class = 14 和 number = 2601。檢查這些數字以準確找到您的錯誤。

這些錯誤程式碼與您嘗試在 SQL Management Studio 中執行查詢時得到的錯誤程式碼相同:

消息 2601,級別 14,狀態 1,行 1

無法在對像中插入重複

的鍵行…………語句已終止。

“Msg”轉換為 SqlError 上的“Number”屬性,“Level”轉換為“Class”。

try
{
 _cmd.ExecuteNonQuery();
}
catch(SqlException sqlExc)
{
  foreach (SqlError error in sqlExc.Errors)
  {
     string msg = string.Format("{0}: {1}", error.Number, error.Message);
  }
}

這樣,您可以輕鬆準確地辨識“違反唯一約束”錯誤。

馬克

引用自:https://stackoverflow.com/questions/628189