[英]Database Connection from another class
我在程序中创建了一个类来处理数据库连接。 此类包括一个名为OpenConnection()
的方法,用于打开与数据库的连接。 我不相信我的程序符合干净代码的标准。 这是方法。
public void OpenConnection()
{
if(connection==null || connection.State != Connection.Open)
{
connection = new OracleConnection(this.connectionString);
connection.Open();
}
}
这种方法可以正常工作,但我只想确保这是否安全,并且我不会以任何方式利用我的程序。 先感谢您
更新
我还在类中添加了以下方法以关闭连接并进行处理。
public void CloseConnection()
{
if (dbconnect != null | dbconnect.State != ConnectionState.Closed)
{
dbconnect.Close();
}
}
//Here the IDsiposable method is implemented
public void Dispose()
{
CloseConnection();
}
您可以使用using子句,它将自动处理Dispose。
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
SqlCommand command = new SqlCommand("UpdateEmployeeTable", connection);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add(new SqlParameter("@EmployeeID", 123));
command.CommandTimeout = 5;
command.ExecuteNonQuery();
connection.close();
}
如果添加此答案中建议的用例,并且打算在单个线程上且在非常有限的范围内使用,则您的编码解决方案似乎可以 。 也就是说,您似乎正准备在许多方法调用中使用此类作为参数,因为您想
Open
)(例如,调用堆栈中的先前调用) 确实打开了连接(我们称之为“环境”连接))。 这些策略中的任何一种通常都会导致麻烦。 最好将作用域保持较小,知道连接处于打开状态以及何时关闭它:
using (var connection = new OracleConnection(...))
{
connection.Open();
...
}
当您拥有如此小的范围时,您的抽象现在将毫无价值。
由于OracleConnection实现IDisposable,因此可能造成资源泄漏。 另外,在ConnectionState中的连接上调用close.Executing或Fetching可能很糟糕,因为它将回滚所有未提交的事务。
public void OpenConnection()
{
if (connection == null)
{
connection = new OracleConnection(this.connectionString);
connection.Open();
return;
}
switch (connection.State)
{
case ConnectionState.Closed:
case ConnectionState.Broken:
connection.Close();
connection.Dispose();
connection = new OracleConnection(this.connectionString);
connection.Open();
return;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.