我经常使用类似这样的模式。我想知道这是不是可以,或者是否有我没有在这里应用的最佳实践。
具体地说,我想知道,在抛出异常的情况下,我在finally块中拥有的代码是否足以确保适当地关闭连接?
public class SomeDataClass : IDisposable
{
private SqlConnection _conn;
//constructors and methods
private DoSomethingWithTheSqlConnection()
{
//some code excluded for brevity
try
{
using (SqlCommand cmd = new SqlCommand(SqlQuery.CountSomething, _SqlConnection))
{
_SqlConnection.Open();
countOfSomething = Convert.ToInt32(cmd.ExecuteScalar());
}
}
finally
{
//is this the best way?
if (_SqlConnection.State == ConnectionState.Closed)
_SqlConnection.Close();
}
//some code excluded for brevity
}
public Dispose()
{
_conn.Dispose();
}
}
发布于 2008-09-26 18:46:38
将您的数据库处理代码包装在"using“
using (SqlConnection conn = new SqlConnection (...))
{
// Whatever happens in here, the connection is
// disposed of (closed) at the end.
}
发布于 2008-09-26 18:55:01
.Net框架管理一个连接池是有原因的。相信它!:)您不需要编写这么多代码就可以连接到数据库并释放连接。
您可以只使用'using‘语句,并确保'IDBConnection.Release()’将为您关闭连接。
高度复杂的“解决方案”往往会导致错误代码。简单就是更好。
发布于 2008-09-26 18:49:53
我猜你说的_SqlConnection.State == ConnectionState.Closed
指的是!=
这肯定会奏效的。我认为更习惯的做法是将connection对象本身包含在using语句中,但是如果您出于某种原因想要重用相同的connection对象,那么这样做是很好的。
不过,有一件事是绝对应该更改的,那就是Dispose()
方法。不应在dispose中引用connection对象,因为该对象可能已在那时完成。相反,您应该遵循推荐的Dispose模式。
https://stackoverflow.com/questions/141204
复制相似问题