繁体   English   中英

Linq to SQL插入存储过程从插入中排除第一行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM