2009-07-24 10 views
0

複数のフィールドがasp:DropDownListとasp:TextBoxの両方にあります。また、特定のコントロールのVisibleプロパティを変更してユーザーがそれらを編集できないようにする多数のユーザーロールがあります。このデータはすべて、PostBackのストアドプロシージャコールで保存されます。問題は、私がパラメータを送信し、コントロールがページ上になかったことです。明らかに値がないため、ストアドプロシージャではnullに初期化されたパラメータがあります。しかし、私が変更したくなかったデータベースにあった以前の値は、ヌルで上書きされます。ベストプラクティス - 複数のフィールド、ユーザーロール、および1つのストアドプロシージャの処理

これはかなり一般的な問題ですが、私はそれを説明する良い方法はありませんでした。 私の質問は、ページ上にあるフィールドをいくつか残しておくと同時に、ストアドプロシージャを使ってデータベース内の値をすべて保持する方法です。

答えて

0

レンダリングするデータ(および関連するUI)を選択するときに、実際に使用しているロジックとして更新するデータを選択するときに、同じロジックを適用します。

0

私は問題は、その値にかかわらず、単一のSQLアップデートですべてのフィールドの更新を行いたいということだと思います。

特定のパラメータについて個別に更新することを意味していても、更新する前に入力の健全性チェックを行うべきだと思います。

0

例がないと、あなたの正確な状況を知るのが少し難しいですが、ここにはあなたにいくつかのアイデアを与える架空の声明があります。

UPDATE SomeImaginaryTable 
SET FakeMoneyColumn = COALESCE(@FakeMoneyValue, FakeMoneyColumn) 
WHERE FakeRowID = @FakeRowID 

パラメータがnullでない限り、これは基本的には使用する場合には、パラメータ値の列を更新します。あなたがSQLの特定のバージョンについては言及しなかったため、T-SQL(MS SQL Server)を使用しています列は既存の値です。

0

一般的に私の更新機能

  1. でこれを克服するために、私はデシベルでフォーム
  2. Updateから新たに変更された値を使用して、ロードされた値を交換するユーザー
  3. の現在の値をロードします。

このようにして、私はすべての現在のプラスと変更されたすべてが変更されるでしょう。

このロジックは、すべてのフィールドがNULLになり、dbに送信される前に新しい値に置き換えられるため、追加フォームでも機能します。もちろん、挿入や更新をするかどうかをチェックするだけです。

関連する問題