2

我有一个带有 MySqlConnection 对象的类,我在我的应用程序中重用它

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

我有一些使用这个的方法

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

确实会发生 Open() 调用失败,因为连接已经打开。
是的,我所有的 Open() 都有一个匹配的 Close()

现在我发现的一个解决方案是每次使用它时都克隆连接

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

出于某种原因,这段代码闻起来很糟糕。使用安全吗?还有另一种我不知道处理打开/关闭的方法吗?

4

2 回答 2

4

您可以检查连接是否已经打开_connection.ConnectionState == ConnectionState.Open

我建议让您的类IDisposable在 dispose 方法中实现和处置 MySqlConnection 并在构造函数(或初始化方法)中初始化连接。然后,您可以使用 ConnectionState 来确定是否需要在运行查询之前重新初始化连接。

您不应该每个查询之间连接/断开连接,这会非常慢。

于 2011-02-11T22:50:52.923 回答
3

也许考虑重构该类,并在每个方法中的每次使用时实例化您的 MySqlConnection ?

还要考虑 C# 的using声明:

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

如果这不是一个可行的选择/重构,那么考虑将.Open()and包装在自己.Close()的块中。try catch

于 2011-02-11T22:47:33.893 回答