循环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());
         }
     }
}

循环Listview,更新数据库

我怀疑这是因为你重用了你的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块中,以便即使抛出异常也会关闭连接。