循环Listview,更新数据库

时间:2014-06-11 22:45:11

标签: c# sql listview sql-update

我的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());
         }
     }
}

1 个答案:

答案 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,以便即使抛出异常也会关闭您的连接。