如何在 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");
你的
ad.InsertCommand.ExecuteNonQuery();
需要在 for 循环内。
现在,它在 for 循环之外,因此只称为一个。另外,因为它是您正在尝试的多行插入,所以最好将其包装在 OLEDB 事务中以避免数据丢失/不一致。
基本上
- 创建 OleDbTransaction
- 插入所有记录。(通过调用执行非查询)
- 提交 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
语句。