我有一个带有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();
出于某种原因,这段代码闻起来很糟糕。使用安全吗?还有其他方法我不知道处理开/关吗?
答案 0 :(得分:3)
也许考虑重构一下这个类,并在每个方法的每次使用中实例化你的MySqlConnection?
还要考虑C#的using
声明:
using (var myConn = new MySqlConnection())
{
myConn.Open();
//do some work.
}
//the MySqlConnection is now out of scope.
如果这不是一个可行的选项/重构,那么考虑将.Open()
和.Close()
包装在他们自己的try catch
块中。
答案 1 :(得分:3)
您可以使用_connection.ConnectionState == ConnectionState.Open
检查是否已打开连接。
我建议你创建类实现IDisposable
并在dispose方法中配置MySqlConnection并初始化构造函数内的连接(或初始化方法)。然后,您可以使用ConnectionState确定在运行查询之前是否需要重新初始化连接。
您应该不在每个查询之间进行连接/断开连接,这将非常慢。