尝试在同一连接中运行多个命令时,C#Winforms Npgsql 3.0.5“正在进行的操作”错误

时间:2016-03-29 12:07:37

标签: c# database database-connection npgsql

我正在尝试在C#Winforms中运行以下代码段。这段代码适用于pgsql 2.2.6适配器。为了与pgsql3.0.5适配器一起正常工作,可以进行哪些更正?感谢。

NpgsqlConnection conn = new NpgsqlConnection(MainForm2.MyConString);
        {
            conn.Open();
            using (NpgsqlCommand cmd = new NpgsqlCommand("SELECT rfid,name,sc_id from passenger ORDER by name", conn))
            {
                NpgsqlDataReader dr = cmd.ExecuteReader();
                while (dr.Read())
                {
                    var obj = new PassengerClass
                    {
                        RFID = dr.GetString(0),
                        Name = dr.GetString(1),
                        sc_id = dr.GetInt32(2)
                    };
                    s = dr.GetString(0);
                    try { ret.Add(s, obj); }
                    catch (Exception ex) { SM.Debug("Fail to add RFID Name in hash RFID:" + s + ex.ToString()); }
                }
            }
            MainForm2.PassHash = ret;
            try
            {
                using (NpgsqlCommand cmd = new NpgsqlCommand(string.Format("UPDATE place set useridx ={0} where useridx=0", MainForm2.userIDX), conn))
                    cmd.ExecuteNonQuery();

                using (NpgsqlCommand cmd = new NpgsqlCommand(string.Format("UPDATE zonename set useridx ={0} where useridx=0", MainForm2.userIDX), conn))
                    cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                SM.Debug("Error on update users IDX for place and zone with value 0 :" + ex.ToString());
            }

因此,在第二个命令语句中,它给出了以下错误:

  

类型'System.InvalidOperationException'的第一次机会异常   发生在Npgsql.dll

中      

附加信息:操作已在进行中。

enter image description here

编辑其他信息: enter image description here

1 个答案:

答案 0 :(得分:14)

你需要处理在第一次执行ExecuteReader时得到的NpgsqlDataReader,用一个using语句包装它,就像你使用NpgsqlCommand一样。