Dre*_*teh 3 c# database design-patterns wrapper
我正在为C#设计数据库包装器.以下是我的两个选项:
选项A:
class DBWrapper:IDisposable
{
private SqlConnection sqlConn;
public DBWrapper()
{
sqlConn = new SqlConnection("my connection string");
sqlConn.Open();
}
public DataTable RunQuery(string Sql)
{
implementation......
}
public Dispose()
{
if(sqlConn != null)
sqlConn.Close();
}
}
Run Code Online (Sandbox Code Playgroud)
选项B:
class DBWrapper
{
public DBWrapper()
{
}
public DataTable RunQuery(string Sql)
{
SqlConnection sqlConn = new SqlConnection("my connection string");
.....implementation......
sqlConn.Close();
}
}
Run Code Online (Sandbox Code Playgroud)
对于选项,在实例化类时打开连接.因此,无论调用者调用RunQuery多少次,连接始终都准备就绪.但是如果应用程序在应用程序的早期实例化DBWrapper,那么在应用程序完成之前,连接将被打开并且什么都不做.此外,它可以在执行期间实例化许多DBWrapper.所以,这有点浪费资源.
对于选项B,它没有选项A具有的问题,但每次调用者调用RunQuery时都必须打开和关闭新连接.我不确定它会对性能有多大影响.
请分享您的专长.谢谢你的阅读.
出于性能原因,你肯定不想选择B(至少在我遇到的情况下).让我建议选项C:
class DBWrapper:IDisposable { private SqlConnection sqlConn;
public void EnsureConnectionIsOpen()
{
if (sqlConn == null)
{
sqlConn = new SqlConnection("my connection string");
sqlConn.Open();
}
}
public DataTable RunQuery(string Sql)
{
EnsureConnectionIsOpen();
implementation......
}
public Dispose()
{
if(sqlConn != null)
sqlConn.Close();
}
}
Run Code Online (Sandbox Code Playgroud)
您可以考虑使用单例模式来确保只有一个DBWrapper实例.