2

データベース(1レコード)からデータを取得し、各値をテキストボックスまたはドロップダウンリストに配置しています。これらの値の一部はDB.nullです。もしそうなら、私はそれらのそれぞれを ""(空白)に変換します。ただし、ユーザーがテキストボックス/ドロップダウンリストを変更すると、新しい結果を「保存」できます。私の問題はこれです:

ユーザーが空白のままにした場合、値がDB.nullであることを維持できるようにしたいと思います。これを行う方法はありますか?

また、テキストボックスに値があり、ユーザーがその値を削除することを決定した場合、それをDB.Nullに変換することもできますか?これが私があなたたちにいくつかのアイデアを与えるためにやろうとしたことです:

productName != ""
    ? myCommand.Parameters.AddWithValue("@ProductName", productName)
    : myCommand.Parameters.AddWithValue("@ProductName", DBNull.Value);
4

5 に答える 5

7

SQL Server を使用するとnull、またはDBNull.Value値を に設定するために交換可能に使用できると思いますNULL

また、コードを次のように変更します。

myCommand.Parameters.AddWithValue(
    "@ProductName",
    // this requires a cast as ?: must return the same type
    String.IsNullOrWhiteSpace(productName)
        ? (object)DBNull.Value
        : (object)productName
);

またはnull、明示的なキャストを使用する場合と使用しない場合:

myCommand.Parameters.AddWithValue(
    "@ProductName",
    ! String.IsNullOrWhiteSpace(productName) ? productName : null
);
于 2011-12-13T15:07:03.960 に答える
2

空の文字列をチェックしてから使用することは有効です。

myCommand.Parameters.AddWithValue("@ProductName", DBNull.Value)

もしそうなら、次のように:

if (string.IsNullOrEmpty(ProductName)) {

    myCommand.Parameters.AddWithValue("@ProductName", DBNull.Value);

} else {

    myCommand.Parameters.AddWithValue("@ProductName", ProductName);

}
于 2011-12-13T15:05:12.337 に答える
0

.Net 2.0以降を使用している場合は、Nullable(Of T)構造を利用することを検討してください。Null値のテストが非常に簡単になり、値が指定されている場合は、オブジェクトの.ValueプロパティをTextBoxにドロップするだけで済みます。これらのオブジェクトはデフォルトでnullに設定されているため、データベースのレコードを更新するときに値が指定されていない場合は、変数をそのままにして、NULLを使用してデータベースに追加します。

最初は少し奇妙な作業があることを認めますが(TextBoxにバインドするときは.Valueプロパティを使用することを忘れないでください)、その後、最初のハードルを処理する場合は、構造が非常に便利です。 null許容値を持つ可能性のある多くのデータベースフィールド。

于 2011-12-13T15:08:38.783 に答える
0

DBNullデータ中心のタイプ(のような)をあなたのと結び付けないのが最善TextBoxです。データ側でコードがすっきりと見えるようになるかもしれませんが、空の文字列を。との間で自動的に変換する組み込みの方法はありませんDBNull

DB側のクリーンな方法は

myCommand.Parameters.AddWithValue(
    "@ProductName",
    productName.IsNullOrEmpty() ? (object)(DBNull.Value) : productName
);
于 2011-12-13T15:09:41.817 に答える
0

少し短いバージョン:

myCommand.Parameters.AddWithValue(
    "@ProductName", 
    productName == null ? DBNull.Value : (object)productName
);
于 2011-12-13T15:12:49.687 に答える