2017-08-21 7 views
1

私はwinformsアプリケーションを開発中で、ボタンをクリックするとDBにアクセスするためにデータを保存しようとしています。私は更新メソッドを使用しています(これは初めてですが、これを使用しています)が、何らかの理由でデータを保存しているときに、DBに保存された値が間違って保存されます。 誰かが私が間違ってやっていることを指摘するのに役立つことができますか?間違った列に保存してください

 string cb = "UPDATE Config SET features = @features, pricecost = @pricecost, price1 = @price1, tax = @tax, margem = @margem, price = @price, barcode = @barcode WHERE Code = @code"; 
     cmd = new OleDbCommand(cb, con); 
     cmd.Parameters.Add("@features", OleDbType.VarChar).Value = txtFeatures.Text; 
     cmd.Parameters.Add("@price", OleDbType.VarChar).Value = txt_Price.Text; 
     cmd.Parameters.Add("@price1", OleDbType.VarChar).Value = txt_pricewithouttax.Text; 
     cmd.Parameters.Add("@margem", OleDbType.VarChar).Value = txt_margem.Text; 
     cmd.Parameters.Add("@pricecost", OleDbType.VarChar).Value = txt_pricecost.Text; 
     cmd.Parameters.Add("@tax", OleDbType.VarChar).Value = txt_tax.Text; 
     cmd.Parameters.Add("@barcode", OleDbType.VarChar).Value = txtBarcode.Text; 
     cmd.Parameters.Add("@code", OleDbType.VarChar).Value = txtCode.Text; 

例えば、txt_Price.Textはprice1 @で保存し、txt_margem.Textが@priceで保存...

私はこれを解決するために何ができますか?

おかげ

+0

コードをたどって、フィールドの値が一致していることを確認してください。どこかの名前の不一致が考えられます。 – gilliduck

+1

場合によっては、更新ステートメントは、更新するフィールドが配置されているのと同じ列の順序にする必要があります。質問を更新し、Configテーブルのデータベース列スキーマを表示することもできますか。 – MethodMan

+2

OLE Access用DBドライバは、名前付きパラメータを適切にサポートします。クエリに出現する順にパラメータを追加します。または、[この回答に記載されている](https://stackoverflow.com/a/21925885/4137916)のような回避策でヘルパーを適用してください。 –

答えて

1

あなたはアクセス、いわゆる「Microsoft Jetの」へのOLE DB接続を使用しています。パラメータ名はまったく一致せず、代わりに序数を使用することで有名です。

パラメータをコマンドテキストに表示されている順序と同じ順序で正確に追加する必要があります。また、同じパラメータをSQL Serverなどで2回使用することはできません。

varcharが問題を求めているため、価格を格納してデータ型を監視します。

+0

初めてAccessデータベースを使用しています。私はsqlとmysqlのプロジェクトで働いていましたが、この問題はありませんでした。助けてくれてありがとう – d3pod

+0

ええ、その痛み。アクセスを伴う並行環境でトランザクションを使用し始めるときに影響を与えるブレース。この場合、実際のRDBMSは確かに行く方法です。 – dlatikay

関連する問題