我有一个像这样的 sqlConnection 管理器类:
public class SQLConn {
public string connStr = System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"];
private SqlConnection sqlConn;
public SqlConnection Connection()
{
sqlConn = new SqlConnection(connStr);
return sqlConn;
}
public void Open()
{
sqlConn .Open();
}
}
如果我使用带有“using”语句的函数,例如:
var conn = new SQLConn();
using (conn.Connection())
{
String query = "Select * from table";
objSql = new SqlCommand(query, conn.Connection());
conn.Open();
DoSomething();
}
自从 conn.Connection()
返回一个 SqlConnection 对象后,using 语句是否自动处理连接?或者,我是否必须在 SqlConn 类上实现 IDisposable 和自定义 Dispose 方法?
这是一个好方法吗?我正在使用遗留代码,但我还不能使用 ORM,但是有没有办法简化这个现有模式来管理/创建 SQL 连接?
最佳答案
using
语句将查看表达式的最终类型 - 即从 .Connection()
返回的任何内容;如果返回的是 IDisposable
的东西,那么你没问题。
如果你弄错了,编译器会告诉你;-p(它不会让你在不是IDisposable
的东西上使用using
)。
您可能应该注意在何处创建两个 连接:
using (var c = conn.Connection()) // <==edit
{
String query = "Select * from table";
objSql = new SqlCommand(query, c); // <==edit
c.Open();
DoSomething();
}
可能还有:
public SqlConnection Connection()
{
if(sqlConn == null) sqlConn = new SqlConnection(connStr); // <== edit
return sqlConn;
}
关于c# - 将 C#'s ' using' 语句与自定义对象的函数一起使用,是否需要实现 IDisposable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/915022/