[英]Linq to SQL insert stored procedure exclude first row from inserting
我在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!");
}
}
代替
for(int i = 0; i < dataGridView1.Rows.Count - 1; i++)
{
采用
for(int i = 0; i < dataGridView1.Rows.Count; i++)
{
这样,您也可以获得最后一行。
循环终止已打开:
i < dataGridView1.Rows.Count - 1;
这将始终比数据网格中的行数少一。
只需将其替换为:
i < dataGridView1.Rows.Count;
同样,正如Adrian Iftode在其注释中指出的那样,您不需要在循环的每次迭代中都重新创建上下文,也不需要调用SubmitChanges
因为您的存储过程SubmitChanges
数据直接写回到数据库中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.