如何在呼叫者完成后关闭我的连接?

4 c# database oledb connection


我创建了以下方法:

 public System.Data.OleDb.OleDbDataReader GetReader(string sqlQuery)
  {

          System.Data.OleDb.OleDbConnection myConnection = new System.Data.OleDb.OleDbConnection();
          LoadConnectionStrings();
          myConnection.ConnectionString = ConnectionString;
          myConnection.Open();
          System.Data.OleDb.OleDbCommand myCommand = new System.Data.OleDb.OleDbCommand(sqlQuery, myConnection);
          System.Data.OleDb.OleDbDataReader myReader = null;
          myReader = myCommand.ExecuteReader();

          return myReader;

  }
Run Code Online (Sandbox Code Playgroud)

几千行代码依赖它,我想我实际上并没有真正思考它......

无论如何,.如果我以这种方式检索一个阅读器我无法关闭连接,如果我在读者调用read()方法之前关闭连接,它会在读取时爆炸并说出与数据库的连接需要要开放.

问题是,如何从以前的代码体中关闭连接?或者所有连接一般都可能..

从我在这里读到的,如果你没有专门调用'close()'它就不会被关闭,如果你正在使用访问2003文件,它会让你处于一个受伤的世界

Mar*_*ell 12

在这种情况下,连接需要保持打开状态以便阅读器工作 - 但是,ExecuteReader存在一个过载,允许您为阅读器指定一个标志,以便在阅读器关闭时关闭连接:

myReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection);
Run Code Online (Sandbox Code Playgroud)

这允许调用者使用:

using(var reader = GetReader(query)) {
    //...
}
Run Code Online (Sandbox Code Playgroud)

当呼叫者完成阅读器时,连接将完全关闭.