Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Invalid attempt to Read when reader is closed. Создать новый или можно открыть? 
:(
    Опции темы
Wardena
  Дата 5.3.2007, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пуфыфтик =)



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 13.9.2006
Где: Уфа

Репутация: нет
Всего: нет



Привет.

Осуществляю соединение с MySQL сервер следующим образом:

Код

        {
            string UserID = "";
            int id = 0;
            string DataE = "";
            string UnmannerText = "";
            string Nickname = "";
            string commandText = "";
            MySqlDataReader Reader;
            MySqlCommand command;
            string connectionString = @"Server=localhost;Database=warnings;Uid=root;Pwd=mousehole;";
            MySqlConnection connection = new MySqlConnection(connectionString);
            connection.Open();
            UserID = getUserIDid();
            if (UserID != "")
            {
                Nickname = getnickname();
                UnmannerText = getunmannertext();
                DataE = getdata();
                commandText = "select UserID from main where UserID = '"+ UserID +"'";
                command = new MySqlCommand(commandText, connection);
                command.CommandType = CommandType.Text;
                Reader = command.ExecuteReader();
                if (Reader.HasRows == false)
                {
                    Reader.Close(); //закрываю Reader
                    command.CommandText = "insert into main (UserID, BansCount,WarningsCount, Banned, LastNickname) values ('" + UserID + "', 10, 20, 1,'" + Nickname + "')";
                    command.ExecuteNonQuery();
                    command.CommandText = "select id, UserID from main where UserID = '" + UserID + "'";
                    Reader = command.ExecuteReader();
                    while (Reader.Read()) //Здесь выдает ошибку: Invalid attempt to Read when reader is closed.
                    {
                        id = Convert.ToInt32(Reader["id"]);
                        Reader.Close();
                        command.CommandText = "insert into nicknames (UserID, NickName, TextOfWarning, Active, Data) values (" + id + ", '" + Nickname + "', '" + UnmannerText + "', 1, '" + DataE + "')";
                        command.ExecuteNonQuery();
                    }
                }
             }
                else
                    MessageBox.Show("Выберете нарушение из списка");
        }


Open() у Reader вроде нет... так что я хотела узнать, мне каждый раз нужно использовать разный Reader или как?
PM MAIL ICQ   Вверх
Idsa
Дата 5.3.2007, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 15
Всего: 62



Вопрос не очень ясен.
 smile Программа-то, похоже, работает у тебя неправильно. Ты заходишь в цикл while, видимо, чтобы пройти все записи. Но при первом же проходе закрываешь Reader. Как-то нелогично smile 


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Wardena
Дата 5.3.2007, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пуфыфтик =)



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 13.9.2006
Где: Уфа

Репутация: нет
Всего: нет



в хелпе про Read() написано "Advances the MySqlDataReader to the next record. " 
Код

[C#] 
public bool Read();

видимо говорит можно ли переместиться на следующую запись, я так поняла.

а использование его опять таки из хелпа:
Код

  MySqlDataReader myReader;
  myReader = myCommand.ExecuteReader();
  // Always call Read before accessing data.
  while (myReader.Read()) {
  Console.WriteLine(myReader.GetInt32(0) + ", " + myReader.GetString(1));
  }

у меня в коде аналогичное использование... или что-то не так? smile 
PM MAIL ICQ   Вверх
Idsa
Дата 5.3.2007, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 15
Всего: 62



Цитата(Wardena @  5.3.2007,  21:01 Найти цитируемый пост)
или что-то не так?

Именно. Посмотри внимательно: в примере проходятся  все записи Ридера, а у тебя же на первой итерации вызывается Reader.Close(). Получается, ты всегда будешь получать только 1 id.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Wardena
Дата 5.3.2007, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пуфыфтик =)



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 13.9.2006
Где: Уфа

Репутация: нет
Всего: нет



Блин точно... с ума схожу =)
Переделала вот так:
Код

                    Reader = command.ExecuteReader();
                    while (Reader.Read())
                        id = Convert.ToInt32(Reader["id"]);
                    Reader.Close();
                    command.CommandText = "insert into nicknames (UserID, NickName, TextOfWarning, Active, Data) values (" + id + ", '" + Nickname + "', '" + UnmannerText + "', 1, '" + DataE + "')";
                    command.ExecuteNonQuery();

Спасибо.

Это сообщение отредактировал(а) Wardena - 5.3.2007, 21:24
PM MAIL ICQ   Вверх
Idsa
Дата 5.3.2007, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 15
Всего: 62



Цитата(Wardena @  5.3.2007,  21:12 Найти цитируемый пост)
у меня вообще там может быть только 1 запись.

Тогда нелогично то, что ты изменила структуру if (Reader.HasRows) на while. Это меня и смутило.

А в твоем случае ошибку, скорее всего, выдает на второй итерации, т. к. на первой ты закрываешь Reader, но цикл while никто не отменял, и он продолжает выполняться. Измени на if (Reader.HasRows)... и все будет тип-топ smile.

Это сообщение отредактировал(а) Idsa - 5.3.2007, 21:39


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0458 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.