如屏幕截图所示,我想通过仅插入 中的数量、描述和价格值来更新“订单详细信息”表中的 3 行(订单#3)DataGridView2。我使用 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();
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用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();
}
}
Run Code Online (Sandbox Code Playgroud)
PS:代码只是一个示例。使用 order_number, datetime 作为唯一值是一个糟糕的主意(它不是唯一的,那是另一回事。即使是,这也是一个糟糕的主意)。代码使用删除+插入,因为您实际上没有主键可以使用更新(同样,这是一个糟糕的表设计)。
| 归档时间: |
|
| 查看次数: |
12275 次 |
| 最近记录: |