Проблема параметризованного запроса C # MySQL - PullRequest
1 голос
/ 07 мая 2009

У меня есть следующий метод, который используется для заполнения DAO из базы данных. Он выполняет 3 чтения - одно для основного объекта и 2 для некоторых переводов.

public bool read(string id, MySqlConnection c)
{
    MySqlCommand m = new MySqlCommand(readCommand);
    m.Parameters.Add(new MySqlParameter("@param1", id));
    m.Connection = c;
    MySqlDataReader r = m.ExecuteReader();
    r.Read();
    accountID = Convert.ToInt32(r.GetValue(0).ToString());
    ...
    comment = r.GetValue(8).ToString();
    r.Close();
    m = new MySqlCommand(getAccountName);
    m.Parameters.Add(new MySqlParameter("@param1", accountID));
    m.Connection = c;
    r = m.ExecuteReader();
    r.Read();
    account1Name = r.GetValue(0).ToString();
    r.Close();
    m = new MySqlCommand(getAccountName);
    m.Parameters.Add(new MySqlParameter("@param1", secondAccountID));
    m.Connection = c;
    r = m.ExecuteReader();
    r.Read();
    account2Name = r.GetValue(0).ToString();
    r.Close();
    return true;
}

На линии account2Name = r.GetValue(0).ToString(); я получаю следующую ошибку:

Invalid attempt to access a field before calling Read()

Я не понимаю, в чем проблема - предыдущая строка вызывает чтение!

Ответы [ 2 ]

3 голосов
/ 07 мая 2009

Это, кажется, работает раньше в вашем коде. Вы уверены, что там есть значение для чтения (т. Е. Ваш запрос возвращает 0 строк или ноль или что-то еще, что не может быть преобразовано в строку?)

1 голос
/ 07 мая 2009
  1. Похоже, что эта процедура отлично работает на линии account1Name = r.GetValue(0).ToString();. Может быть, вы хотите проверить возвращаемое значение r.Read(), чтобы увидеть, есть ли сначала какие-либо строки. Ошибка может быть интерпретирована как «Попытка доступа к полю без данных» ...
  2. Похоже, вы пытаетесь получить одно значение из запроса. Возможно, вы захотите изучить метод ExecuteScalar() вместо ExecuteReader().
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...