Непонятки с reader

Nikolay Gerasimov
Дата: 31.01.2006 13:38:54
Имею следующий код:
            myCommand1.CommandText = "SELECT tShemaR.* FROM tShemaR WHERE (tipAb_ = " & i & ")"
            myCommand1.Connection = myConnect1
            myReader1 = myCommand1.ExecuteReader
            myCommand2.CommandText = "SELECT tShemaP.* FROM tShemaR WHERE (tipAb_ = " & i & ")"
            myCommand2.Connection = myConnect2
            myReader2 = myCommand2.ExecuteReader
На последней строке выскакивает ошибка. Объясните почему?
saint
Дата: 31.01.2006 14:02:31
что за ошибка?

Вы точно уверены, что myConnect1!=myConnect2?
Nikolay Gerasimov
Дата: 31.01.2006 14:11:18
Соединение с одним и тем-же сервером
Но если я буду ссылаться на один и тот-же connect, то будет следующая реплика:
Additional information: There is already an open DataReader associated with this Connection which must be closed first. 
Поэтому мне пришлось создать дополнительные подключения, но уже под другими именами. Теперь выскакивает это:
An unhandled exception of type 'System.Data.OleDb.OleDbException' occurred in system.data.dll
saint
Дата: 31.01.2006 14:22:30
Во-первых, дополнительные подключения могут быть идентичны первому, в тч и по креденшелам. Важно только чтоб это было два конекшена а не две ссылки на один.

Во-вторых:
попробуйте отобразить сведения об исключении:

catch(OleDbException exception)
   for (int i=0; i < exception.Errors.Count; i++)
   {
      MessageBox.Show("Index #" + i + "\n" +
             "Message: " + exception.Errors[i].Message + "\n" +
             "Native: " + exception.Errors[i].NativeError.ToString() + "\n" +
             "Source: " + exception.Errors[i].Source + "\n" +
             "SQL: " + exception.Errors[i].SQLState + "\n");
   }

Кстати, что за источник данных у вас? SQL Server, Access?
Nikolay Gerasimov
Дата: 31.01.2006 14:25:31
saint
Во-первых, дополнительные подключения могут быть идентичны первому, в тч и по креденшелам. Важно только чтоб это было два конекшена а не две ссылки на один.

Ето как? Каким образом это достигается?
saint
Кстати, что за источник данных у вас? SQL Server, Access?

MSSQL Server
saint
Дата: 31.01.2006 14:34:03
Nikolay Gerasimov

MSSQL Server

Тогда логичнее использовать SqlClient, а не OleDb


Nikolay Gerasimov

Ето как? Каким образом это достигается?

ну например для sql client:

string con_string="строка подключения...";
SqlConnection con1 = new SqlConnection(con_string);
SqlConnection con2 = new SqlConnection(con_string);
Получается два отдельных конекшена, но с одинаковыми параметрами, кстати они будут находится к тому же в одном пуле.

Насчет ошибки - выведите native код как я вам показал.
Nikolay Gerasimov
Дата: 31.01.2006 14:55:51
saint

   for (int i=0; i < exception.Errors.Count; i++)
   {
      MessageBox.Show("Index #" + i + "\n" +
             "Message: " + exception.Errors[i].Message + "\n" +
             "Native: " + exception.Errors[i].NativeError.ToString() + "\n" +
             "Source: " + exception.Errors[i].Source + "\n" +
             "SQL: " + exception.Errors[i].SQLState + "\n");
   }

exception.Errors.Count - выдается ошибка "is not a member of 'System.exception'".
Приложение пишу на vb.net
saint
Дата: 31.01.2006 15:36:54
дык Exception должен быть нужного класса:

catch(OleDbException exception)
{
   for (int i=0; i < exception.Errors.Count; i++)
   {
      MessageBox.Show("Index #" + i + "\n" +
             "Message: " + exception.Errors[i].Message + "\n" +
             "Native: " + exception.Errors[i].NativeError.ToString() + "\n" +
             "Source: " + exception.Errors[i].Source + "\n" +
             "SQL: " + exception.Errors[i].SQLState + "\n");
   }
 }

я же написал, просто забыл выделить
VSH
Дата: 01.02.2006 22:53:29
Открытый ридер может быть только один на соединении. Надо закрыть первый ридер, затем открыть второй.

"While the SqlDataReader is in use, the associated SqlConnection is busy serving the SqlDataReader. While in this state, no other operations can be performed on the SqlConnection other than closing it. This is the case until the Close method of the SqlDataReader is called." MSDN
Шайтан
Дата: 02.02.2006 09:51:16
VSH
Открытый ридер может быть только один на соединении. Надо закрыть первый ридер, затем открыть второй.

"While the SqlDataReader is in use, the associated SqlConnection is busy serving the SqlDataReader. While in this state, no other operations can be performed on the SqlConnection other than closing it. This is the case until the Close method of the SqlDataReader is called." MSDN


именно так
толко у вопошающего 2 (ДВА) коннекшена: myConnect1 и myConnect2