2009-04-12 64 views
2

我使用EntitySpaces處理所有與數據庫相關的編碼。作爲唯一的開發人員,我沒有時間坐下來爲編寫的每一個應用程序編寫SQL,因此使用ES等生成器將我置於實地,併爲我節省了幾天時間,即使不是幾周。C# - 什麼是SQLException什麼是超時錯誤處理和連接失敗

我通常會爲我的應用程序使用的每個表格編寫一系列幫助類。我遇到的問題是,我不知道處理任何SQL超時或失敗連接的最佳方式,除了圍繞處理返回數據的每個方法附加Try-catch。

在EntitySpaces中,SQL連接只有在運行任何種類的CRUD命令時才被構建和執行。

例如:

public TblUserCollection GetCollection() 
    { 

     TblUserCollection collection = new TblUserCollection(); 
     collection.Query.Where(collection.Query.CompanyId == CompanyId); 
     collection.Query.OrderBy(collection.Query.FullName, esOrderByDirection.Ascending); 
     collection.Query.Load(); 

     return collection; 

    } 

當我的助手類被告知某公司的用戶列表分配給一個組合框時調用此方法。該方法然後調用它並將數據分配給列表。我有大約30個這樣的虛線,都是在表格特定的幫助類中調用GetCollection()。

除了剛寫入方法爲:

public TblUserCollection GetCollection() 
    { 

     try 
     { 

      TblUserCollection collection = new TblUserCollection(); 
      collection.Query.Where(collection.Query.CompanyId == CompanyId); 
      collection.Query.OrderBy(collection.Query.FullName, esOrderByDirection.Ascending); 
      collection.Query.Load(); 

      return collection; 
     } 
     catch (System.Data.SqlClient.SqlException ex) 
     { 
      // 
     } 

    } 

我還能做什麼?

回答

1

定義一個基類來處理你的SQL錯誤處理並讓所有的類都去掉。 TblUserCollection實現該基類。所以當你的子類拋出sql異常時,你可以讓基類爲你處理它們,並有優美的退出

你有沒有試過Subsonic(免費版)和LLBLGen(商業版)。兩者都會爲您生成DAL和一些Web組件。你也對Entityspaces滿意嗎?你的回答將幫助我完成自己的項目。

0

這並不真正回答你的問題,但你可以嘗試學習LINQ。它可以使此代碼:

public TblUserCollection GetCollection() 
{ 

    TblUserCollection collection = new TblUserCollection(); 
    collection.Query.Where(collection.Query.CompanyId == CompanyId); 
    collection.Query.OrderBy(collection.Query.FullName, esOrderByDirection.Ascending); 
    collection.Query.Load(); 

    return collection; 

} 

在我的腦海裏更多的可讀性。

+0

@Lucas:標籤指定「.net2.0」。所以LINQ對此可能沒有問題。 – Sung 2009-04-12 18:35:03

+0

哦,沒有仔細看。好的趕上! – Kredns 2009-04-13 01:00:53

0

傳統的方法是讓異常從您的GetCollection方法傳播。你通常不想返回可能是不完整的集合。

然後,也許在您的表示層的頂層,您可以捕獲異常,例如爲用戶提供重試的機會。