Существует назначенный этой команде Command открытый DataReader, который требуется предварительно закрыть

494
10 июля 2018, 10:20
num = textBox5.Text;
using (OleDbConnection oledb = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\WhiteChemist-PC\source\repos\ГСМ\ГСМ\GSM.accdb"))
{
    oledb.Open();
    OleDbCommand command = new OleDbCommand(string.Format($"SELECT (Normaras) FROM [Table] WHERE [Numb] = '{0}'", num), oledb);
    using (OleDbDataReader dataReader = command.ExecuteReader())
    {
        norma = command.ExecuteScalar().ToString();
        if (radioButton1.Checked == true && comboBox2.SelectedIndex == 0)
        {
            try
            {
                k = int.Parse(norma);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
            nadb = (k* (5 / 100));
            command = new OleDbCommand(string.Format($"INSERT INTO [Table].[(Nad)] VALUES ('{0}')", nadb.ToString()), oledb);
            while (dataReader.Read() == true)
                command.ExecuteNonQuery();
        }

В строке norma=command.ExecuteScalar().ToString() выбивает исключение:

System.InvalidOperationException: "Существует назначенный этой команде Command открытый DataReader, который требуется предварительно закрыть."

До этого никогда при работе с бд не возникало таких ошибок.Кто знает в чем дело?

Answer 1

У вас в коде вызывается ExecuteReader, результат которого потом не используется (т.к. реальное значение вы строчкой ниже пытаетесь получить через ExecuteScalar, вызванный у той же команды).

Если подразумевается обработка только одной строки - удалите ExecuteReader и завязанный на него цикл.

Если подразумевается обработка нескольких строк - вычитывайте значение norma из reader, внутри цикла - а не вызовом ExecuteScalar.

READ ALSO
Копирование связанных данных Entity Framework

Копирование связанных данных Entity Framework

Есть база данных, со связанными таблицамиEntity Framework Code First

154
Происходит генерация 0 в следствии цикла

Происходит генерация 0 в следствии цикла

Есть переменная CmoTime, в которой происходит постоянно генерация 0, хотя вроде не должно CmoTime = TimeGenerator(true, OrderInterval, Precision);(К примеру с такими числами...

188
Как сделать переключение сцен свайпом? unity3d

Как сделать переключение сцен свайпом? unity3d

Необходимо сделать так, чтобы проводя пальцем вправо/влево переключалась сцена

207