2011-02-11 185 views
2

我有一個MySqlConnection對象的一類,我在我的應用程序中重用MySQL連接連接重用

public class MySqlWrapper : IDbConnection 
{ 
    MySqlConnection _connection = new MySqlConnection(); 
} 

我已經使用這個

public void UseDB() 
{ 
    _connection.Open(); 
    // Do highly important stuff 
    _connection.Close(); 
} 

的一些方法確實發生了Open()調用因連接已打開而失敗。
是的,我所有的開放式的()有密切的匹配()

現在我發現是克隆的連接解決方​​案,每次我用它

MySqlConnection connClone = _connection.Clone(); 
    connClone.Open(); 

出於某種原因,這個片斷氣味糟糕的代碼。使用安全嗎?有沒有另外一種方式我不知道要處理打開/關閉?

回答

3

您可以檢查連接是否已經用_connection.ConnectionState == ConnectionState.Open打開。

我會推薦讓你的類實現IDisposable,並將MySqlConnection配置在dispose方法中,並在構造函數(或初始化方法)中初始化連接。然後,您可以使用ConnectionState確定在運行查詢之前是否需要重新初始化連接。

你應該不是連接/斷開每個查詢之間,這將是非常緩慢。

+0

是不是最後一部分由Connection Pool隱式處理? – sunside 2011-03-15 16:56:52

3

也許考慮重構一下這個類,並在每種方法的每次使用中實例化MySqlConnection?

還要考慮C#的using聲明:

using (var myConn = new MySqlConnection()) 
{  
    myConn.Open(); 
    //do some work. 
} 
//the MySqlConnection is now out of scope. 

如果這不是一個可行的選擇/重構,然後再考慮自己的try catch塊都包裹在.Open().Close()