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

时间:2011-03-08 00:22:48

标签: c# tsql dataadapter

我有一个使用c#的Windows应用程序。我正在使用Northwind Products表,我需要以相同的百分比更新所有单价。我知道如何在SELECT查询中编写这个但是如何使用乘法运算符和sql参数以及UPDATE查询表单类将更新写入我的数据访问层并且它在SQL查询中显示但我没有放置在正确的位置,因为我得到null。谁能帮助我如何编写更新字符串?这是我正在努力解决的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;      

2 个答案:

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

答案 1 :(得分:0)

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

  1. 对内存中的数据进行更新;换句话说:使用C#代码更新数据集中Products表的行。一旦进行了更改,您就可以使用以标准方式配置的DataAdapter(或TableAdapter)将它们保留回数据库,以便它只是将数据传输到内存数据集或从内存数据集传输数据。
  2. 在将数据加载到DataSet之前,或者在将数据从DataSet保存到数据库之后,使用TSQL直接更新数据。在这种情况下,您将使用Query表适配器或SqlClient.SqlCommand对象。
  3. 在使用DataAdapter将数据保存回数据库时,我看不到进行转换的任何优势。我可以通过这种方法看到的一个缺点是,习惯于使用DataAdatpers简单地加载和保存数据的程序员会感到困惑。