gpt4 book ai didi

c# - 如何使用 SQL 查询更新表中的多行?

转载 作者:行者123 更新时间:2023-11-30 14:51:27 24 4
gpt4 key购买 nike

我是 SQL 和 C# 的新手。 screenshot

如屏幕截图所示,我想通过仅插入来自 DataGridView2 的数量、描述和价格值来更新订单详细信息表中的 3 行(订单 #3) .我使用 Order_Number 和 DateTime 的组合来使订单详细信息唯一且易于在表中找到。

我使用了以下代码,但它根据 DataGridView2 中的第 0 行更新了订单 #3 的 3 行:

private void Update_OrderDetails_Click(object sender, EventArgs e)  
{
SqlConnection cn = new SqlConnection("Data Source=PCNmm-TOSH;Initial Catalog=mydb;Integrated Security=True");
cn.Open();

SqlCommand cm = new SqlCommand("UPDATE Customer_Order_Details SET Qty = @Qty, Description = @Description, Price = @Price WHERE Order_Number = @OrderNumber and DateTime = @DateTime ");


cm.Parameters.Add("@OrderNumber", SqlDbType.Int);
cm.Parameters["@OrderNumber"].Value = 3;

cm.Parameters.Add("@DateTime", SqlDbType.DateTime);
cm.Parameters["@DateTime"].Value = "2015 - 12 - 17 15:04:57.043";



cm.Parameters.Add("@Qty", SqlDbType.Int);
cm.Parameters["@Qty"].Value = dataGridView2.Rows[0].Cells[2].Value;

cm.Parameters.Add("@Description", SqlDbType.Text);
cm.Parameters["@Description"].Value = dataGridView2.Rows[0].Cells[3].Value;

cm.Parameters.Add("@Price", SqlDbType.Money);
cm.Parameters["@Price"].Value = dataGridView2.Rows[0].Cells[4].Value;


cm.Connection = cn;
cm.ExecuteNonQuery();
}
}

但如果我使用 for声明for (i = 0; i <= dataGridView2.RowCount; i++)并使用 dataGridView2.Rows[i].Cells[Cell_Number].Value在参数中它给我错误“参数化查询'(@OrderNumber int,@DateTime datetime,@Qty int,@Description text,'期望参数'@Qty',未提供”

我想要的是:

Row 1在订单详细信息表 = DataGridView2 Row 0

Row 2在订单详细信息表 = DataGridView2 Row 1

Row 3在订单详细信息表 = DataGridView2 Row 2

但问题是:我不知道如何索引数据库中 OrderDetail 表中的那 3 行。知道如何用 DataGridView2 中的 3 行更新数据库订单详细信息表中的 3 行(顺序 3)吗?谢谢

最佳答案

private void Update_OrderDetails_Click(object sender, EventArgs e)
{
string sql = @"insert Customer_Order_Details
(Order_Number, DateTime, Qty, Description, Price)
values
(@OrderNumber, @DateTime@Qty, @Qty, @Description, @Price)";

using (SqlConnection cn = new SqlConnection("Data Source=.;Initial Catalog=mydb;Integrated Security=True"))
using (SqlCommand cm = new SqlCommand(sql, cn))
using (SqlCommand delete = new SqlCommand("delete from Customer_Order_Details where Order_Number = @OrderNumber"))
{

cm.Parameters.AddWithValue("@OrderNumber", 3);
cm.Parameters.AddWithValue("@DateTime", new DateTime(2015, 12, 17, 15, 4, 57, 43));
cm.Parameters.AddWithValue("@Qty", 0);
cm.Parameters.AddWithValue("@Description", "");
cm.Parameters.AddWithValue("@Price", 0M);

delete.Parameters.AddWithValue("@OrderNumber", 3);

cn.Open();
delete.ExecuteNonQuery();

foreach (DataGridViewRow row in dataGridView2.Rows)
{
cm.Parameters["@Qty"].Value = row.Cells[2].Value;
cm.Parameters["@Description"].Value = row.Cells[3].Value;
cm.Parameters["@Price"].Value = row.Cells[4].Value;
cm.ExecuteNonQuery();
}
cn.Close();
}
}

PS:代码只是一个示例。使用 order_number、datetime 作为唯一值是一个糟糕的想法(它不是唯一的,那是另一回事。即使是,也是一个糟糕的想法)。代码使用 delete + insert 是因为您实际上没有主键来使用更新(同样,一个糟糕的表设计)。

关于c# - 如何使用 SQL 查询更新表中的多行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34341716/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com