C#+处理DbConnection和DbCommand并捕获错误

Eat*_*oku 3 c# dbconnection

我试图了解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)

Rus*_*Cam 6

using 与调用usingtry/finally块相同.dispose()finally

DbCommand应该在using它实现的声明中包装IDisposable.

请注意,这DbCommand实际上是一个抽象类,因此您需要

  • 从中衍生出来
  • 代码到接口(IDbCommand)
  • 使用预定义的派生类之一,如SqlCommand.

DbConnection也是一个抽象类,所以你需要做一些类似我上面提到的类似的东西DbCommand.

一般的建议是,如果一个对象实现IDisposable,它应该被包装在一个using语句中,这样Dispose()被调用来释放资源,即使在语句块中抛出异常也是如此.在您的示例中,一个好的做法是将每个连接,命令DataTableDbDataAdapter对象包装在using语句中.