c# npgsql: Вылетает исключение

115
04 мая 2021, 14:50

В разных функция запрашиваю данные из БД

 NpgsqlCommand cmd = new NpgsqlCommand();
        cmd.Connection = db.con;
        Complex[] spectr = new Complex[1024];
        switch (n)
        {
            case 1:
                cmd.CommandText = "SELECT v_ampl,v_freg FROM spectr_vpo1  Order by time desc  LIMIT 1024";
                break;
            case 2:
                cmd.CommandText = "SELECT v2,p2,o2,v2_time FROM vpo2 ORDER BY v2_time DESC LIMIT 1";
                break;
            case 3:
                cmd.CommandText = "SELECT v3,p3,o3,v3_time FROM vpo3 ORDER BY v3_time DESC LIMIT 1";
                break;
            case 4:
                cmd.CommandText = "SELECT v4,p4,o4,v4_time FROM vpo4 ORDER BY v4_time DESC LIMIT 1";
                break;
            case 5:
                cmd.CommandText = "SELECT v5,p5,o5,v5_time FROM vpo5 ORDER BY v5_time DESC LIMIT 1";
                break;
            case 6:
                cmd.CommandText = "SELECT v6,p6,o6,v6_time FROM vpo6 ORDER BY v6_time DESC LIMIT 1";
                break;
            case 7:
                cmd.CommandText = "SELECT v7,p7,o7,v7_time FROM vpo7 ORDER BY v7_time DESC LIMIT 1";
                break;
            case 8:
                cmd.CommandText = "SELECT v8,p8,o8,v8_time FROM vpo8 ORDER BY v8_time DESC LIMIT 1";
                break;
        }
        using (NpgsqlDataReader reader_v_current = cmd.ExecuteReader())
        {
            int i = 0;
            while (reader_v_current.Read())
            {
                try
                {
                    spectr[i].Re = reader_v_current.GetDouble(0);
                    spectr[i].Im = reader_v_current.GetDouble(1);
                }
                catch { }
                i++;
            }
        }

Вторая функция

 NpgsqlCommand cmd = new NpgsqlCommand();
        cmd.Connection = db.con;
        //double[] skz = new double[3];
        //DateTime time = Convert.ToDateTime("00:00:00");
        switch (n)
        {
            case 1:
                cmd.CommandText = "SELECT v1,p1,o1,v1_time FROM vpo1 ORDER BY v1_time DESC LIMIT 1";
                break;
            case 2:
                cmd.CommandText = "SELECT v2,p2,o2,v2_time FROM vpo2 ORDER BY v2_time DESC LIMIT 1";
                break;
            case 3:
                cmd.CommandText = "SELECT v3,p3,o3,v3_time FROM vpo3 ORDER BY v3_time DESC LIMIT 1";
                break;
            case 4:
                cmd.CommandText = "SELECT v4,p4,o4,v4_time FROM vpo4 ORDER BY v4_time DESC LIMIT 1";
                break;
            case 5:
                cmd.CommandText = "SELECT v5,p5,o5,v5_time FROM vpo5 ORDER BY v5_time DESC LIMIT 1";
                break;
            case 6:
                cmd.CommandText = "SELECT v6,p6,o6,v6_time FROM vpo6 ORDER BY v6_time DESC LIMIT 1";
                break;
            case 7:
                cmd.CommandText = "SELECT v7,p7,o7,v7_time FROM vpo7 ORDER BY v7_time DESC LIMIT 1";
                break;
            case 8:
                cmd.CommandText = "SELECT v8,p8,o8,v8_time FROM vpo8 ORDER BY v8_time DESC LIMIT 1";
                break;
        }
        using (NpgsqlDataReader reader_v_current = cmd.ExecuteReader())
        {
            while (reader_v_current.Read())
            {
                try
                {
                    v = reader_v_current.GetDouble(0);
                    p = reader_v_current.GetDouble(1);
                    o = reader_v_current.GetDouble(2);
                    time = reader_v_current.GetDateTime(3);
                }
                catch { }
            }
        }

И вылетает исключение Npgsql.NpgsqlOperationInProgressException: "A command is already in progress: SELECT v_ampl,v_freg FROM spectr_vpo1 Order by time desc LIMIT 1024"

Может я не правильно работаю с данной библиотекой Подскажите пожалуйста как решить мою проблему Функции работают вызываются в разных формах

Answer 1

Скорее всего Вы пытаетесь выполнить второй запрос когда соединение ещё занято предыдущим.

По хорошему Вам нужно либо дождаться выполнения первого запроса либо распараллелить работу с БД.

READ ALSO
Как узнать над каким gameobject находится мышь

Как узнать над каким gameobject находится мышь

У меня есть таблица с элементами в unityМне надо зафиксировать свайп над элементом в таблице, и в процессе свайпа его передвигать

115
Выбрать все дочерние подразделения с помощью Linq

Выбрать все дочерние подразделения с помощью Linq

Существует такая модель данных:

131
Вопрос насчёт MySQL для Node.JS

Вопрос насчёт MySQL для Node.JS

Я создаю ботов для Discord при помощи модуля discordjs для Node

104
PHP, отсортировать массив с timestamp

PHP, отсортировать массив с timestamp

Имеется массив с timestamp-ми примерно с прошлого года (когда добавлялись пользователи)Надумала сделать статистику, но не пойму как можно день...

133