我试图了解DbConnection和DbCommand,以及在使用后处理这些对象的正确方法.
以下是我的代码片段.通过在DbConnection和DbCommand上使用"using statement",它就足够了吗?我试图防止可能的内存泄漏.
第二个问题,
我必须处理DbCommand对象吗?
非常感谢
DbProviderFactory fac = DbProviderFactories.GetFactory(this.DatabaseProviderName);
using (DbConnection dbConn = fac.CreateConnection())
{
dbConn.ConnectionString = this.ConnectionString;
using (DbCommand comm = fac.CreateCommand())
{
comm.CommandText = "select * from aTable";
comm.Connection = dbConn;
DataTable targetTable = new DataTable();
DbDataAdapter facDA = fac.CreateDataAdapter();
facDA.SelectCommand = comm;
facDA.Fill(targetTable);
//assuming Adapter would open / close connection (right assumption?)
//do something with the datatable
}
}
Run Code Online (Sandbox Code Playgroud)
using 与调用using的try/finally块相同.dispose()finally
DbCommand应该在using它实现的声明中包装IDisposable.
请注意,这DbCommand实际上是一个抽象类,因此您需要
IDbCommand)SqlCommand.DbConnection也是一个抽象类,所以你需要做一些类似我上面提到的类似的东西DbCommand.
一般的建议是,如果一个对象实现IDisposable,它应该被包装在一个using语句中,这样Dispose()被调用来释放资源,即使在语句块中抛出异常也是如此.在您的示例中,一个好的做法是将每个连接,命令DataTable和DbDataAdapter对象包装在using语句中.
| 归档时间: |
|
| 查看次数: |
3895 次 |
| 最近记录: |