MySql Data Reader не извлекает строки

Я столкнулся с каким-то странным поведением при использовании MySql DataReader. Запрос правильно оценивается в Mysql Explorer (то есть он возвращает ожидаемые записи). Однако при отладке приложения ошибка читается как:

Перечисление не дало результатов

Отказ от ответственности: я знаю о следующих вопросах, заданных на сайте

Считыватель данных MySQL не входит в цикл

программа чтения данных mysql не находит строки c#

программа чтения данных mysql не находит строки c#

Но я закрываю ридер, не обращаюсь к нему несколько раз, правильно открываю и закрываю соединение и использую Mysql вместо SQL Server, вот и все.

А теперь вот мой код C#:

MySqlConnection conn = this.conectar();    // this method performs Conn.Open();
List<Clase> listaClases = new List<Clase>();


string query = "SELECT c.id_clase, c.descripcion, e.nombre, e.calle, e.numero, e.telefono, e.email, "
            + "e.id_localidad, l.d_localidad, p.d_provincia, c.id_profesor, u.apellido, u.nombre, u.email "
            + "FROM CLASE c "
            + "JOIN USUARIO u ON c.id_profesor = u.id_usuario "
            + "JOIN CLASE_ESTABLECIMIENTO ce ON c.id_clase = ce.id_clase "
            + "JOIN ESTABLECIMIENTO e ON ce.id_establecimiento = e.id_establecimiento "
            + "JOIN LOCALIDAD l ON e.id_localidad = l.id_localidad "
            + "JOIN PROVINCIA p ON l.id_provincia = p.id_provincia "
            + "WHERE e.id_localidad = ?idLocalidad AND c.id_clase = ?idClase ";

MySqlCommand cmd = new MySqlCommand(query, conn);
cmd.Parameters.Add("?idLocalidad", MySqlDbType.Int32).Value = b.idLocalidad;
cmd.Parameters.Add("?idClase", MySqlDbType.Int32).Value = c.idClase;
MySqlDataReader dr = cmd.ExecuteReader();


while (dr.Read())
{
    var idClase = dr.GetInt32(0);
    var description = dr.GetString(1);
    var nombreEst = dr.GetString(2);
    var calleEst = dr.GetString(3);
    var altura = dr.GetInt32(4);
    var domExtra = dr.GetString(5);
    var telefono = dr.GetString(6);
    var emailEst = dr.GetString(7);
    var idLoc = dr.GetInt32(8);
    var descLoc = dr.GetString(9);
    var prov = dr.GetString(10);
    var idProf = dr.GetInt32(11);
    var ape = dr.GetString(12);
    var nom = dr.GetString(13);
    var emailProf = dr.GetString(14);

    listaClases.Add(/* construct class,  code does not reach this point */);
}
dr.Close();  //close data reader
conn.Close();  //dispose of connection

Предложения очень ценятся, спасибо!


person Juan M    schedule 19.07.2016    source источник
comment
Где возникает ошибка? Подождите.... prepare необязательно?   -  person Uueerdo    schedule 20.07.2016


Ответы (1)


После более внимательного изучения кажется, что вам не хватает столбца, вы назначаете 0-14, когда в вашем операторе выбора существует только 0-13.

SELECT 
0 c.id_clase,
1 c.descripcion,
2 e.nombre,
3 e.calle,
4 e.numero,
5 e.telefono,
6 e.email,
7 e.id_localidad,
8 l.d_localidad,
9 p.d_provincia,
10 c.id_profesor,
11 u.apellido,
12 u.nombre,
13 u.email
person Henry    schedule 19.07.2016
comment
я использовал? префикс для всех остальных запросов, и это не вызвало никаких проблем. Но все же попробую и отпишусь, спасибо! - person Juan M; 20.07.2016
comment
Я получаю исключение MySQL, если я это делаю. Спасибо за предложение, хотя - person Juan M; 20.07.2016
comment
я пересмотрел свой ответ - person Henry; 20.07.2016
comment
Я посчитал параметры и вы правы. Таблица была обновлена, и я не отразил изменения. Спасибо - person Juan M; 20.07.2016