循环Listview,更新数据库
本文关键字:数据库 更新 Listview 循环 | 更新日期: 2023-09-27 18:08:18
我的ListView由一个数据表填充。当我检查超过一行时,它不会更新。它只更新被选中的第一行。
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());
}
}
}
我怀疑这是因为你重用了你的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
块中,以便即使抛出异常也会关闭连接。