2014-01-26 151 views
2

我想知道什麼是連接到數據庫的一個很好的做法,我設計了一個連接類,並一直使用它連接到SQL Server:連接到SQL數據庫的最佳實踐是什麼?

public class Connection 
{ 
    private SqlConnection conn; 
    private static Connection myConnection; 

    private Connection() 
    { 
     try 
     { 
      conn = new SqlConnection("Data Source=.;Initial Catalog=Padideh;Integrated Security=True"); 
      conn.Open(); 
     } 
     catch (Exception ex) 
     { 
      new ErrorHandler().ErrorLoging("", "Connection", ex.Message, "Cannt Connect To DB."); 
     } 

    } 
    public static SqlConnection GetConnection 
    { 
     get 
     { 
      if (myConnection == null || myConnection.conn.State==System.Data.ConnectionState.Closed) 
      { 
       myConnection = new Connection(); 
      } 
      return myConnection.conn; 
     } 
    } 

    ~Connection() 
    { 
     try 
     { 
      myConnection.conn.Close(); 
     } 
     catch (Exception ex) 
     { 
      new ErrorHandler().ErrorLoging("", "~Connection", ex.Message, "Cannt Close DB Connection."); 
     } 
    } 
} 

這是一個Singleton類和我使用的SqlConnection,和我總是使用這個類連接到SQLserver,我想知道這是一個好方法,我可以在每個項目中使用它?什麼是連接數據庫的好習慣?

+3

「最好的方式」是一個問題類型的問題。有多種方式,其優點和缺點取決於您的任務。我個人不喜歡單身。你也可以考慮使用ORM框架。 – Vadim

回答

4

我會不是創建一個單例如圖所示。

只需創建每個使用環境一個連接,使用using以便與大自然的IDisposable處理更容易,並且依靠Connection Pooling - 這已經採取的適當的細節。總的來說,我相信單身人士的這種使用將會使得處理連接 - 即使沒有線程化 - 總體上也更難,沒有/最小的收益。

雖然我主張用DI/IoC的(雖然一個簡單的靜態輔助方法將在捏做),這應該被用來獲得每慣用法上下文一個連接(或適當的壽命),完成後立即處理。

+0

只要你總是在內部方法中打開和關閉連接(而不是在構造函數/析構函數中的全局連接),那麼大概的單例方法可以嗎?我問,因爲我認爲單身人士有很大的優勢,你可以檢查它在一個地方關閉(處置方法) - 即使開發者犯了一個錯誤,並忘記關閉它在其他內部方法。 – NickG

相關問題