Закрытый DataReader

544
01 июня 2017, 06:26

Нужно получить несколько таблиц из Mysql БД и записать их в DataSet. Вернее это даже не таблицы а выборки из двух таблиц слитые в таблицу через UNION. В интерфейсе СУБД (WorkBench) запрос отрабатывает корректно поэтому приведу только код клиента :

DataSet dataset = new DataSet("Name");
//
internal static void GetInvestment(string order, string SType)
        {
            using (MySqlConnection conn = new 
MySqlConnection(ConnectionString))
            {
                string query = @"SELECT ... FROM (...UNION ALL...) X
                            GROUP BY `Title` ";
                MySqlCommand comm = new MySqlCommand(query, conn);
                comm.Parameters.AddWithValue("@ID", order);
                comm.Parameters.AddWithValue("@Type", SType);
                try
                {
                    conn.Open();
                    MySqlDataReader reader = comm.ExecuteReader();
                    while (reader.Read())
                    {
                        if (reader.HasRows)
                        {
                            if (reader.GetDecimal(3) > 0)
                            {
                                DataTable table = dataset.Tables.Add(SType);
                                table.Load(reader);
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    BOX.ShowError(ex.Message, ex.Source);
                }
            }
        }

Должно получится несколько выборок, по одной согласно каждой SType, т.е. метод GetInvestment вызывается в цикле, каждый раз с новым SType однако сразу ловит исключение :

Invalid attempt to call Read when reader is closed

По смыслу понятно что reader оказался закрытым после 1же таблицы но почему и как его держать открытым?

Answer 1

Замените:

using (MySqlDataReader reader = comm.ExecuteReader())
{
  if (reader.Read() && reader.GetDecimal(3) > 0)
  {
     DataTable table = dataset.Tables.Add(SType);
     table.Load(reader);
  }
}

Сколько таблиц должно создаться в результате одного вызова метода GetInvestment?

READ ALSO
Как сделать авторазметку grid?

Как сделать авторазметку grid?

При заполнении колонки кнопками до низа, появляется прокрутка внизКак вместо прокрутки сделать добавление второго столбца и продолжить...

385
Проигрывание файлов с помощью winmm.dll

Проигрывание файлов с помощью winmm.dll

Собственно, задача следующая, используя winmmdll воспроизвести файл

324
CefSharp программно нажать на кнопку

CefSharp программно нажать на кнопку

Доброго времени суток, не подскажите, как программно нажать на кнопку использую cefsharp (chromium), код кнопки

745
DDD repository/facade implementation + bounded context relationship

DDD repository/facade implementation + bounded context relationship

Вопрос в следующем, как лучше реализовать механизм Include?

365