使用 Gridview 插入数据时,仅输入第一行,忽略后续行



我的 asp.net 网站中有一个 Gridview,用于收集用户条目,然后将这些条目提交以插入到我的 SQL 表中。目前,此过程有效,但它只会插入第一个 Gridview 行中的数据,后续行似乎被忽略。任何帮助都非常感谢!!:)

这是我的 C# 代码开始我的按钮单击:

foreach (GridViewRow g1 in GridView1.Rows)
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = "spCreateOrder";
cmd.CommandType = CommandType.StoredProcedure;                    
cmd.Parameters.AddWithValue("@customer_id", TextBox1.Text);
cmd.Parameters.AddWithValue("@track_num", TextBox2.Text);
cmd.Parameters.AddWithValue("@pckg_num", TextBox3.Text);
cmd.Parameters.AddWithValue("@manuf_name", g1.Cells[0].Text);
cmd.Parameters.AddWithValue("@model_name", g1.Cells[1].Text);
cmd.Parameters.AddWithValue("@qty", g1.Cells[2].Text);
cmd.Parameters.AddWithValue("@notes", g1.Cells[3].Text);
con.Open();
cmd.ExecuteNonQuery();
con.Close();

这是我的存储过程"spCreateOrder":

ALTER PROCEDURE [dbo].[spCreateOrder]
@customer_id INT,
@track_num NVARCHAR(50),
@pckg_num NUMERIC,
@manuf_name NVARCHAR(50),
@model_name NVARCHAR(50),
@qty NUMERIC,
@notes NVARCHAR(MAX)
AS
BEGIN
IF NOT EXISTS (SELECT * FROM Orders WHERE customer_id=@customer_id AND track_num=@track_num)
BEGIN
DECLARE @NewOrder TABLE (order_id INT);
INSERT INTO Orders
(customer_id, track_num, pckg_num)
OUTPUT
inserted.order_id INTO @NewOrder
VALUES
(@customer_id, @track_num, @pckg_num);
INSERT INTO Items
(manuf, model, qty, notes, order_id)
SELECT
@manuf_name, @model_name, @qty, @notes, order_id
FROM @NewOrder;
END
ELSE
INSERT INTO Items
(manuf, model, qty, notes, order_id)
SELECT
@manuf_name, @model_name, @qty, @notes, order_id
FROM @NewOrder;
END

我会在您的存储过程中创建一个表值参数,在代码中填充该参数并发送整个表并合并它。比逐行高效得多,并且同样易于实现。

至于你的错误,你是否用探查器测试了什么SQL实际发送到服务器?

最新更新