使用带有乘数函数的 dataadapter 编写更新 SQL 查询

发布于 2024-10-20 18:44:50 字数 774 浏览 6 评论 0原文

我有一个使用 C# 的 Windows 应用程序。我正在使用 Northwind 产品表,我需要按相同的百分比更新所有单价。我知道如何在 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;      

I have a windows application using c#. I am using Northwind Products table and I need to update all Unit Prices by the same percentage. I know how to write this in a SELECT query but having trouble with how to write update using multiplication operator and sql parameters and UPDATE query form class to my data access layer and it shows up in the SQL query but I don't have it placed in the right spot because I get null. Can anyone help me with how to write the update string? Here's a snippet of the part of SQL I'm struggling with:

//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;      

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

白芷 2024-10-27 18:44:50

只执行查询怎么样?

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 并且仅运行更新,并且您知道它的作用以及何时发生。当然,根据需要过滤 UPDATE,以便您只更新您想要更新的内容。

How about just execute the query?

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

Then use the dbCommand object, set it as follows:

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

That way you're running the UPDATE and only the update and you know what it does and when it happens. Of course, filter that UPDATE as needed so that you only update what you mean to update.

巨坚强 2024-10-27 18:44:50

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

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

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

You are using a DataAdapter in a non-standard way. I'd suggest you consider 2 different approaches:

  1. Make the update on your in-memory data; in other words: update the rows of the Products table in your data set using C# code. Once the changes are made, you can persist them back to the database with a DataAdapter(or TableAdapter) that is configured in the standard way, so that it just transfer data to and from the in-memory dataset.
  2. Use TSQL to update the data directly before you load it into the DataSet, or after you save it from the DataSet to the database. In this case you will be using either a Query table adapter or a SqlClient.SqlCommand object.

I can't see any advantage to doing a transformation while you're saving the data back to the database using the DataAdapter. One downside I can see with this approach is that it will be confusing to programmers who are used to using DataAdatpers to simply load and save data.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文