我的ListView由DataTable填充。当我检查超过1行时,它不会更新。它仅更新已检查的第一行。
for (int i = 0; i < listView1.Items.Count; i++)
{
if (listView1.Items[i].Checked)
{
DataRow dr = ds.Tables["EXP"].Rows[i];
Itemchek = dr["NUM_FAC"].ToString();
dr["MODE_PAIE"] = "cheque";
modeP = dr["MODE_PAIE"].ToString();
mantantR = dr["MNT_REG"].ToString();
try
{
objConn.Open();
updateCmd.CommandText = "update EXPORT set MODE_PAI=@modeP ,MNT_REG=@mantantR where NUM_FAC=@Itemchek";
updateCmd.Connection = objConn;
updateCmd.Parameters.Add("@modeP", modeP);
updateCmd.Parameters.Add("@mantantR", mantantR);
updateCmd.Parameters.Add("@Itemchek", Itemchek);
da.UpdateCommand = updateCmd;
da.Update(ds, "EXP");
objConn.Close();
}
catch (Exception x)
{
MessageBox.Show(x.ToString());
}
}
}
答案 0 :(得分:0)
我怀疑它正在发生,因为您正在重复使用SqlCommand
个实例。
修改代码以便在您需要时创建新代码,并在完成后进行处理。
try
{
objConn.Open();
using (var updateCmd = new SqlCommand(objConn))
{
updateCmd.CommandText =
"update EXPORT set MODE_PAI=@modeP ,MNT_REG=@mantantR where NUM_FAC=@Itemchek";
updateCmd.Parameters.Add("@modeP", modeP);
updateCmd.Parameters.Add("@mantantR", mantantR);
updateCmd.Parameters.Add("@Itemchek", Itemchek);
da.UpdateCommand = updateCmd;
da.Update(ds, "EXP");
}
}
catch (Exception x)
{
MessageBox.Show(x.ToString());
}
finally
{
objConn.Close();
}
您还应该根据需要创建新的SqlConnection
并进行处理。但是,如果您要重复使用它,那么至少将调用放在Close()
块中的finally
,以便即使抛出异常也会关闭您的连接。