我在SQL Server中有一个存储过程负责将记录插入数据库:
ALTER proc [dbo].[Sp_Add_Item_Decription]
@orderid int,
@itemid int,
@qty decimal(18, 2),
@price decimal(18, 2)
as
insert into [ResturantDB].[dbo].[ItemDescribtion] ([OrderID], [ItemID],[Qty], [Price])
values (@orderid, @itemid, @qty, @price)
我使用Linq to SQL生成以下代码但是当我执行此代码时,如果datagridview包含一行,则它不会插入到数据库中,但如果datagridview包含多个记录,则插入所有记录,但第一排。我不知道是什么问题。我需要插入所有datagridview记录。
private void Button3_Click(object sender, EventArgs e)
{
dataGridView1.DataSource = DTL;
if (!string.IsNullOrEmpty(textBox1.Text) && !string.IsNullOrEmpty(textBox3.Text))
{
for(int i = 0; i < dataGridView1.Rows.Count - 1; i++)
{
resturantDataContext addorderdes = new resturantDataContext();
addorderdes.Sp_Add_Item_Decription(Convert.ToInt32(textBox1.Text),
Convert.ToInt32(dataGridView1.Rows[i].Cells[0].Value),
Convert.ToDecimal(dataGridView1.Rows[i].Cells[3].Value),
Convert.ToDecimal(dataGridView1.Rows[i].Cells[4].Value));
addorderdes.SubmitChanges();
}
RadMessageBox.Show("RECORD ADDED!");
}
}
答案 0 :(得分:0)
而不是
for(int i = 0; i < dataGridView1.Rows.Count - 1; i++)
{
使用
for(int i = 0; i < dataGridView1.Rows.Count; i++)
{
这样你也得到了最后一行。
答案 1 :(得分:0)
您的循环终止已开启:
i < dataGridView1.Rows.Count - 1;
这将始终比数据网格中的行数少一个。
只需将其替换为:
i < dataGridView1.Rows.Count;
同样正如Adrian Iftode在comment中指出的那样,你不需要在循环的每次迭代中重新创建上下文,而你也不需要调用SubmitChanges
作为你的存储过程将数据直接写回数据库。