Откройте более одного DataReader на одном OleDbConnection - PullRequest
1 голос
/ 05 октября 2011

Я использую IBM OLE DB Provider для подключения к DB2.

Я могу открыть более одного DataReader на одном OleDbConnection. Этот провайдер неявно открывает дополнительное соединение для каждого 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();
    }  

1 Ответ

1 голос
/ 05 октября 2011

Если у вас есть попытка / окончательная блокировка, как у вас сейчас, соединение всегда будет закрыто.

Нет, вы не можете открыть более одного DataReader за одно соединение. Вы получите исключение, если попытаетесь сделать что-то подобное.

От MSDN :

Обратите внимание, что когда DataReader открыт, соединение используется исключительно этим DataReader. Вы не можете выполнять какие-либо команды для подключения, в том числе создание другого DataReader, до первоначального DataReader закрыто.

Вместо этого откройте 2 соединения (не беспокойтесь о штрафе, так как, скорее всего, ваши соединения все равно будут объединены) и убедитесь, что вы закрываете соединение в блоке finally или вместо этого используйте using заявление.

...