0

オプションをコンボボックスとして表示する、データベースへのフロントエンドを作成しています。そして、データベースに null を返せるようにする必要があります。

現時点では、レコードをクエリに「偽装」してデータテーブルにデータを入力し、選択を検出して、nullこのアイテムが選択されている場合は更新ステートメントにハードコーディングするという解決策があります。

--GetDataByAvailableTechs query 
            SELECT     tblLEMSCredentialsId, TechNumber
            FROM         tblLEMSCredentials AS aLEMSCreds
            UNION ALL
            SELECT     '99999' AS Expr1, '<NONE>' AS Expr2

.

            //populate combo box
            BV_LEMSHIPDataSet.tblLEMSCredentialsDataTable dtAvailableTechs = taLEMSCreds.GetDataByAvailableTechs(selectedSerial);  
            cboTechNumber.DataSource = dtAvailableTechs;

.

            //Save back to DB
            if (lemsCredsID == 99999)
            {
                taDevice.UpdateQuery_Restage(null, selectedSerial);
            }
            else
            {
                taDevice.UpdateQuery_Restage(lemsCredsID, selectedSerial);
            }

誰かがこれを行うためのより良い方法を提案できますか? アプリケーションを別の 5 つの同様のフィールドに対応させる必要があり、更新の if else バージョンを多数作成したくありません。

G

4

4 に答える 4

3

過去に同様のアプローチを使用しましたが、NULL 値にマイナスの数値を使用しました。これにより、1 つの if ステートメントで 0 未満のものを NULL として扱うことができます。

ただし、これは、テーブル内のIDが常に正であると想定しています:)

于 2009-02-24T11:18:57.850 に答える
2

NULL オブジェクト パターン。UI に対して空の文字列を返すようにし、データベースの更新時に値を抽出するメソッド呼び出しを提供します。通常、これは真の値を返しますが、null オブジェクトはこの動作をオーバーライドして null を返します。

マジック ナンバーは必要ありません。コントロールをデータソースにバインドするときに、この値を「バインド可能な値」の先頭に追加するだけです。

于 2009-02-24T11:22:27.387 に答える
1

文字列値をコンボボックスの「null 値」として配置できます。たとえば、「thenullvalue」と入力すると、コンボボックスの値が null 許容型の int 型 (int?) に解析されます。適切な選択の場合、目的の値が得られます。「null 選択」の場合は null になります (「thenullvalue」を int に解析すると null が得られます) :)

次に、値を次のようにデータベースに保存します。

int? lemsCredsID = parseInt(combobox.Value);

 //Save back to DB
taDevice.UpdateQuery_Restage(lemsCredsID, selectedSerial);

データベースプロバイダーによっては、次のように、null 許容型の null 値を DBNull に変換する必要がある場合もあります。

taDevice.UpdateQuery_Restage((lemsCredsID==null ? DBNull : (int)lemsCredsID), selectedSerial);

お役に立てれば。

于 2009-02-24T11:21:41.697 に答える
0

値が null になることを意図している場合は、データベースに null を渡すことが適切な解決策になります。これにより、null の特別な値を処理する余分なロジックが削減され、非常に危険で曖昧になる可能性があります。

ビューまたはアプリケーション層は、データベースから返された、またはデータベースに渡された null を処理できる必要があります。

たとえば、コントロールをバインドする前に null を string.Empty に変換したり、データベースに渡す前に string.Empty を null に変換したりできます。

于 2009-02-24T11:33:10.700 に答える