DBNullのポイントは何ですか?
質問
.NETでは
null
参照があり、これはオブジェクト参照が空であることを示すためにあらゆる場所で使用されます。
DBNull
があり、これはデータベースドライバ(および少数の他のもの)によって...ほとんど同じことを示すために使用されます。当然ながら、これは多くの混乱を引き起こし、変換ルーチンを作り出さなければなりません。
では、なぜオリジナルの.NETの作者はこれを作ることにしたのでしょうか?私にとっては意味がありません。彼らのドキュメントも意味をなしません。
DBNullクラスは存在しない値を表します。データベースでは、例えば、テーブルの行の列はいかなるデータも含んでいないかもしれません。つまり、その列は単に値を持たないのではなく、全く存在しないものとみなされます。DBNull オブジェクトは、存在しない列を表します。さらに、COM interopはDBNullクラスを使用して、存在しない値を示すVT_NULLバリアントと、特定されていない値を示すVT_EMPTYバリアントを区別しています。
列が存在しないとはどういうことですか?列は存在し、特定の行の値を持っていないだけです。存在しないのであれば、特定のセルにアクセスしようとすると例外が発生し、そのセルは
DBNull
! を区別する必要があることは理解できます。
VT_NULL
と
VT_EMPTY
を作ればいいのに、なぜか
COMEmpty
クラスを作ったらどうでしょうか。そのほうが、.NETフレームワーク全体がすっきりしますよ。
私は何かを見逃しているのでしょうか?どなたか、なぜ
DBNull
が発明された理由と、それがどのような問題の解決に役立っているのかを教えてください。
どのように解決するのですか?
ポイントは、特定の状況において、データベースの値が NULL であることと、.NET の NULL であることの間に違いがあることです。
たとえば ExecuteScalar (結果セットの最初の行の最初の列を返す) を使用して、NULLを返した場合、実行されたSQLは何も値を返さなかったことを意味します。もしDBNullが返ってきたら、それはSQLによって返された値がNULLであったことを意味します。この違いを見分けられるようにする必要があります。
関連
-
[解決済み] アセンブリから型を読み込めなかったエラー
-
[解決済み] "ItemsSourceを使用する前に、Itemsコレクションを空にする必要があります。"
-
[解決済み] csilogfileは何のためにあるのですか?
-
[解決済み] Moq Callbackについて教えてください。
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] C#の正しいバージョン番号を教えてください。
-
[解決済み] usingディレクティブはネームスペースの内側と外側のどちらを使うべきですか?
-
[解決済み] IDisposable インターフェースの正しい使用法
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] C#のconstとreadonlyの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】警告。同じ依存アセンブリの異なるバージョン間で競合が見つかりました。
-
[解決済み] スマートクライアント・ソフトウェアファクトリーの体験談
-
[解決済み] Microsoft.NETFrameworkとMicrosoft.NETFramework64の違いは何ですか?
-
[解決済み] ネットワークの位置からアセンブリをロードすることはできません
-
[解決済み] csilogfileは何のためにあるのですか?
-
[解決済み] 1は有効なWin32アプリケーションではありません "を解決するには?
-
[解決済み] RelativeSourceでWPFバインディングを使用するにはどうしたらいいですか?
-
[解決済み] Visual Studioの「Any CPU」ターゲットはどういう意味ですか?
-
[解決済み] AddWithValue パラメータが NULL の場合の例外について
-
[解決済み] nullとSystem.DBNull.Valueの違いは何ですか?