如何在 C# 的 Access 数据库中插入多个列表框项

本文关键字:插入 列表 数据库 Access | 更新日期: 2023-09-27 17:55:22

我已经编写了这段代码,但它只插入了一个而不是多个项目......

for (int i = 0; i < listBox1.SelectedItems.Count; i++)   
{                  
   ad.InsertCommand = new OleDbCommand("insert into Map_Data (Material_Code,Product_Id) values(@Material_Code,@Product_Id)", con);    
   ad.InsertCommand.Parameters.Add("@Material_Code", OleDbType.Integer).Value =Convert.ToInt32(listBox1.SelectedValue);
   listBox1.Items.Remove(listBox1.SelectedItem);
   ad.InsertCommand.Parameters.Add("@Product_Id", OleDbType.Integer).Value = count;
}   
con.Open();
ad.InsertCommand.ExecuteNonQuery();  
con.Close();
MessageBox.Show("Record is successfully Save In The Database");

如何在 C# 的 Access 数据库中插入多个列表框项

你的

ad.InsertCommand.ExecuteNonQuery();

需要在 for 循环内。

现在,它在 for 循环之外,因此只称为一个。另外,因为它是您正在尝试的多行插入,所以最好将其包装在 OLEDB 事务中以避免数据丢失/不一致。

基本上

  1. 创建 OleDbTransaction
  2. 插入所有记录。(通过调用执行非查询)
  3. 提交 OleDbTransaction

它只插入一行 - 最后一行 - 因为那是你调用ExecuteNonQuery的次数。如果要插入每个单行,请在con.Close();之后立即移动右大括号

for (int i = 0; i < listBox1.SelectedItems.Count; i++)
{
   ad.InsertCommand = new OleDbCommand("insert into Map_Data (Material_Code,Product_Id) values(@Material_Code,@Product_Id)", con);
   ad.InsertCommand.Parameters.Add("@Material_Code", OleDbType.Integer).Value =Convert.ToInt32(listBox1.SelectedValue);
   listBox1.Items.Remove(listBox1.SelectedItem);
   ad.InsertCommand.Parameters.Add("@Product_Id", OleDbType.Integer).Value = count;

   con.Open();
   ad.InsertCommand.ExecuteNonQuery();
   con.Close();
}
MessageBox.Show("Record is successfully Save In The Database");

您可能需要添加某种try/catch块,以防在打开连接或执行实际语句本身时遇到问题。此外,您无需打开/关闭for循环内的连接。在 for 外部打开连接,然后在 for 块之后关闭它就足够了。但同样,我建议您添加try/catch或使用using语句。