0

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;      
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を実行し、更新のみを実行し、それが何を実行し、いつ発生するかを知ることができます。もちろん、必要に応じてそのUPDATEをフィルタリングして、更新しようとしているものだけを更新するようにします。

于 2011-03-08T00:40:51.243 に答える
0

非標準の方法で DataAdapter を使用しています。2 つの異なるアプローチを検討することをお勧めします。

  1. インメモリ データを更新します。つまり、C# コードを使用して、データ セット内の Products テーブルの行を更新します。変更が行われたら、標準的な方法で構成された DataAdapter (または TableAdapter) を使用してデータベースに保持し、インメモリ データセットとの間でデータを転送するだけです。
  2. データを DataSet にロードする前、または DataSet からデータベースに保存した後に、TSQL を使用してデータを直接更新します。この場合、クエリ テーブル アダプターまたは SqlClient.SqlCommand オブジェクトのいずれかを使用します。

DataAdapter を使用してデータをデータベースに保存している間に変換を行う利点は見当たりません。このアプローチの欠点の 1 つは、DataAdatpers を使用して単純にデータをロードおよび保存することに慣れているプログラマーを混乱させることです。

于 2011-03-08T00:34:51.027 に答える