我已编写此代码,但它只插入一个而不是多个项目...
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");
答案 0 :(得分:2)
你的
ad.InsertCommand.ExecuteNonQuery();
需要在for循环中。
现在,它在for循环之外,因此只调用一个。 也因为它是你正在尝试的多行插入,你最好将它包装在oledb事务中以避免数据丢失/不一致..
基本上,
答案 1 :(得分:0)
它只插入一行 - 最后一行 - 因为这是你调用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 block之后关闭它就足够了。但同样,我建议您添加try/catch
或使用using
语句。