C# 对多个插入使用MySqlTransaction时出错
我在windows中有一个窗体,我在其中为标题和详细信息执行insert语句。 我正在对表单使用MySqlTransaction。当header和detail中没有错误时,事务被提交,但当insert查询detail中有错误时,回滚时会出现以下错误 已存在与此连接关联的打开的DataReader 必须先关闭它 这是我的密码C# 对多个插入使用MySqlTransaction时出错,c#,mysql,windows,C#,Mysql,Windows,我在windows中有一个窗体,我在其中为标题和详细信息执行insert语句。 我正在对表单使用MySqlTransaction。当header和detail中没有错误时,事务被提交,但当insert查询detail中有错误时,回滚时会出现以下错误 已存在与此连接关联的打开的DataReader 必须先关闭它 这是我的密码 public string Insert_Hardening_Measures_HdrANDDtl(BL_Vessel_Hardening_Measures objHdr,
public string Insert_Hardening_Measures_HdrANDDtl(BL_Vessel_Hardening_Measures objHdr, List<BL_Vessel_Hardening_Measures> objDtl)
{
string success = "true";
string success1 = "";
MySqlConnection MySqlConnection1 = new MySqlConnection(strCon);
MySqlConnection1.Open();
MySqlTransaction MyTransaction = MySqlConnection1.BeginTransaction();
MySqlCommand MyCommand = new MySqlCommand();
MyCommand.Transaction = MyTransaction;
MyCommand.Connection = MySqlConnection1;
try
{
MyCommand.CommandText = "insert into hardening_measures_hdr (Hardening_Measures_Hdr_id,Month,Year) values (" + objHdr.Hardening_Measures_Hdr_id + ",'" + objHdr.Month + "','" + objHdr.Year + "')";
MyCommand.ExecuteNonQuery();
for (int i = 0; i < objDtl.Count; i++)
{
MyCommand.CommandText = "insert into hardening_measures_dtl (Hardening_Measures_Dtl_id,Hardening_Measures_Hdr_id,Hardening_Measures_Mst_id,Value) values (" + objDtl[i].Hardening_Measures_Dtl_id + "," + objDtl[i].Hardening_Measures_Hdr_id + ",'" + objDtl[i].Hardening_Measures_Mst_id + ",'" + objDtl[i].Value + "')";
MyCommand.ExecuteNonQuery();
}
MyTransaction.Commit();
MySqlConnection1.Close();
}
catch
{
MyTransaction.Rollback();
}
return success;
}
public string Insert\u harding\u Measures\u HdrANDDtl(BL\u Vesser\u harding\u Measures objHdr,List objDtl)
{
字符串success=“true”;
字符串success1=“”;
MySqlConnection MySqlConnection1=新的MySqlConnection(strCon);
MySqlConnection1.Open();
MySqlTransaction MyTransaction=MySqlConnection1.BeginTransaction();
MySqlCommand MyCommand=新的MySqlCommand();
MyCommand.Transaction=MyTransaction;
MyCommand.Connection=MySqlConnection1;
尝试
{
MyCommand.CommandText=“插入到强化度量值中”(强化度量值id,月,年)值(“+objHdr.harding\u度量值id+”,“+objHdr.Month+”,“+objHdr.Year+”)”);
MyCommand.ExecuteOnQuery();
for(int i=0;i
任何遇到这种问题的人,请建议一些你应该经常使用的可能的副本。这种类型的字符串连接对攻击是开放的。并使用using语句来处理您的数据库连接。@Erti Chris Eelmaa我用专用命令对象尝试了您的方法,但dindn不起作用,我没有看到DataReader;它从哪里来?我也没有看到您在回滚后关闭连接。