0

我有一个使用 c# 的 Windows 应用程序。我正在使用 Northwind Products 表,我需要以相同的百分比更新所有单价。我知道如何在 SELECT 查询中编写它,但是在如何使用乘法运算符和 sql 参数以及 UPDATE 查询表单类将更新写入我的数据访问层时遇到了问题,它显示在 SQL 查询中,但我没有放置在正确的位置,因为我得到空值。谁能帮我写更新字符串?这是我正在努力解决的 SQL 部分的片段:

//Update using SQL string
productDataAdapter.UpdateCommand.CommandText =
    "UPDATE Products SET " +
    "UnitPrice * " + multiplier   = "@UnitPrice";

holdParm = new SqlParameter();
holdParm.ParameterName = "@UnitPrice";
holdParm.SourceColumn = "UnitPrice";
productDataAdapter.UpdateCommand.Parameters.Add(holdParm);    

//Open connection
productDataAdapter.InsertCommand.Connection.Open();

//usd data adapter to update the Products table
rowCount = productDataAdapter.Update(productsDataSet, "Products");

return rowCount;      
4

2 回答 2

1

只执行查询怎么样?

decimal factor = 1.1; // for example...
string sql = "UPDATE products set unitPrice = unitprice*" + factor.ToString();

然后使用dbCommand对象,设置如下:

IDbCommand cmd = Database.CreateCommand(sql, CommandType.Text);
cmd.ExecuteReader();

这样,您正在运行 UPDATE 并且仅运行更新,并且您知道它会做什么以及何时发生。当然,根据需要过滤该更新,以便您只更新您想要更新的内容。

于 2011-03-08T00:40:51.243 回答
0

您正在以非标准方式使用 DataAdapter。我建议您考虑两种不同的方法:

  1. 更新您的内存数据;换句话说:使用 C# 代码更新数据集中 Products 表的行。进行更改后,您可以使用以标准方式配置的 DataAdapter(或 TableAdapter)将它们持久化回数据库,以便它仅将数据传输到内存数据集或从内存数据集传输数据。
  2. 在将数据加载到 DataSet 之前或将其从 DataSet 保存到数据库之后,使用 TSQL 直接更新数据。在这种情况下,您将使用查询表适配器或 SqlClient.SqlCommand 对象。

当您使用 DataAdapter 将数据保存回数据库时,我看不到进行转换的任何优势。我可以看到这种方法的一个缺点是它会让习惯于使用 DataAdatpers 简单地加载和保存数据的程序员感到困惑。

于 2011-03-08T00:34:51.027 回答