C# Winforms Npgsql 3.0.5 "An operation already in progress" 尝试在同一连接内执行 运行 多个命令时出错
C# Winforms Npgsql 3.0.5 "An operation already in progress" error when trying to run multiple commands inside same connection
我正在尝试 运行 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());
}
所以,在第二个命令语句中,它给了我以下错误:
A first chance exception of type 'System.InvalidOperationException'
occurred in Npgsql.dll
Additional information: An operation is already in progress.
编辑 附加信息:
您需要处理在第一个 ExecuteReader 调用中获得的 NpgsqlDataReader:像处理 NpgsqlCommand 一样用 using 语句包装它。
处理 NpgsqlDataReader 不会关闭连接 - 只有处理连接才会关闭连接。一个打开的 reader 对应于一个当前打开的命令 运行,您必须在执行新命令之前关闭它。对于原子性,您可以只启动一个包含多个命令的事务。
我正在尝试 运行 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());
}
所以,在第二个命令语句中,它给了我以下错误:
A first chance exception of type 'System.InvalidOperationException' occurred in Npgsql.dll
Additional information: An operation is already in progress.
编辑 附加信息:
您需要处理在第一个 ExecuteReader 调用中获得的 NpgsqlDataReader:像处理 NpgsqlCommand 一样用 using 语句包装它。
处理 NpgsqlDataReader 不会关闭连接 - 只有处理连接才会关闭连接。一个打开的 reader 对应于一个当前打开的命令 运行,您必须在执行新命令之前关闭它。对于原子性,您可以只启动一个包含多个命令的事务。