在单个 OleDbConnection 上打开多个 DataReader

发布于 2024-12-08 09:24:23 字数 817 浏览 1 评论 0原文

我正在使用 IBM OLE DB Provider 连接到 DB2。

我可以在单个 OleDbConnection 上打开多个 DataReader。此提供程序是否隐式为每个 DataReader 打开一个附加连接。

如果是这样,该连接会自动关闭还是保持打开状态直到连接超时。

  OleDbConnection connection = new (connectionString);
  OleDbDataReader reader = null;
  try
    {
      connection.Open();
      reader = OleDbHelpher.ExecuteNonQuery(connection, CommandType.Text,query1);
      while (reader.Read())
      {
        Console.WriteLine(reader[0].ToString());
      }
      reader.Close();

      reader = OleDbHelpher.ExecuteNonQuery(connection, CommandType.Text,query2);
      while (reader.Read())
      {
        Console.WriteLine(reader[0].ToString());
      }
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
    finally
    {
     connecton.Close();
    }  

I am using IBM OLE DB Provider for connecting to DB2.

I can open more than one DataReader on a single OleDbConnection.Does this provider implicitly opens an additional connection for each DataReader.

If so,will this connections closed automatically or stay open until the connection get time-out.

  OleDbConnection connection = new (connectionString);
  OleDbDataReader reader = null;
  try
    {
      connection.Open();
      reader = OleDbHelpher.ExecuteNonQuery(connection, CommandType.Text,query1);
      while (reader.Read())
      {
        Console.WriteLine(reader[0].ToString());
      }
      reader.Close();

      reader = OleDbHelpher.ExecuteNonQuery(connection, CommandType.Text,query2);
      while (reader.Read())
      {
        Console.WriteLine(reader[0].ToString());
      }
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
    finally
    {
     connecton.Close();
    }  

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

饮惑 2024-12-15 09:24:23

如果您以现在的方式使用 try/finally 阻塞,则连接将始终关闭。

不可以,您无法在单个连接上打开多个 DataReader。如果你尝试这样的事情,你将会得到一个例外。

来自 MSDN

请注意,当 DataReader 打开时,连接正在使用中
由该 DataReader 独占。您无法对连接执行任何命令,
包括创建另一个DataReader,直到原来的DataReader
已关闭。

相反,打开 2 个连接(不要担心惩罚,因为很可能您的连接无论如何都会被池化)并确保在 finally 块中关闭连接,或者使用 using 语句。

If you have a try/finally block the way you have it now, the connection will always be closed.

No, you can't open more than one DataReader on a single connection. You will get an exception if you attempt something like this.

From MSDN:

Note that while a DataReader is open, the Connection is in use
exclusively by that DataReader. You cannot execute any commands for the Connection,
including creating another DataReader, until the original DataReader
is closed.

Instead, open 2 connections (don't worry about the penalty since most likely your connections are pooled anyway) and make sure that you close the connection in a finally block or instead use a using statement.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文