2013-09-01 62 views
2

我將我的Asp.Net項目之一中的數據訪問代碼轉換爲MySQL中的MSSQL。我藉此機會嘗試刪除對提供程序特定的類或名稱空間的任何依賴關係。以提供者不可知的方式捕獲sql異常

因此,我不是直接使用MySqlCommand或SqlCommand類,而是使用 DbProviderFactories.GetFactory()方法來返回DbCommand對象。

我遇到的一個問題是我的代碼困住了MySqlExpection異常。我想要一個提供者不可知的方式來捕獲Sql異常。這可能嗎?

+0

只是爲了澄清,你捕捉到的異常是在數據層內還是在它之外? – jaimetotal

+1

Sql實現DBexception。我認爲MSSQL也是。你有沒有試過DBexceptoin?我沒有用於測試的MSSQL。 – Paparazzi

+0

在數據訪問層。 – Aheho

回答

0

的Sql實現DBexception。我認爲MSSQL也是。
你試過DBexception嗎?
我沒有MSSQL來測試。

0

如果對該主題不太瞭解,我的想法是異常是從提供對數據庫的訪問的具體類中拋出的。我可以猜想,一些例外可能是本質上共同的,但其他可能不是。我相信雖然記錄特定的錯誤而不是抽象是一個好習慣。

檢查this SO questionMSDN欲知更多信息。

0

我會推薦這樣的東西。這樣,您可以拋出一個通用的sql異常,也可以拋出與給定邏輯p.e.,ConnectionTimedOutException相關聯的自定義異常。

catch(Exception ex) 
{ 
    if(DbProviderFactories.GetException(ex) is CustomSQLException) 
    { 
     //logic here 
    } 
    throw; 
} 
//Factory method 
public Exception GetException(Exception ex) 
{ 
    Exception result; 
    //Identifying which is the current one 
    switch (CurrentProvider) 
    { 
     case Provider.SQLServer: 
      //logic here 
      result = new CustomSQLServerException(ex); //which extends CustomSQLException 
      break; 
     default: 
      result = ex; 
      break; 
    } 
    return result; 
}