問題タブ [dbnull]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - C# データベース アクセス: DBNull と null
ここで使用する独自の ORM があり、すべての db テーブルに厳密に型指定されたラッパーを提供します。弱く型付けされたアドホック SQL を実行することもできますが、これらのクエリはデータ リーダーから値を取得するために同じクラスを通過します。
そのクラスを Oracle と連携するように微調整する際に、興味深い質問に遭遇しました。DBNull.Value と null のどちらを使用する方がよいですか? DBNull.Value を使用するメリットはありますか? DB の世界から切り離されているため、null を使用する方が「正しい」ように思えますが、意味合いがあります (ToString()
たとえば、値が null の場合にやみくもにすることはできません)。についての決定。
.net - (any == System.DBNull.Value) vs (any は System.DBNull)
値が であるかどうかを確認する方法を好む人はいますDBNull
か? これらの 2 つのステートメントで希望する結果が得られることがわかりましたが、好みがあるのでしょうか?
if (any is System.DBNull)
と同じ:
if (any == System.DBNull.Value)
ありがとう!
.net - .NET DBNull とすべての変数タイプで何もない?
.NET の null 値と変数について少し混乱しています。(VB推奨)
オブジェクトか値型かに関係なく、特定の変数の「nullness」をチェックする方法はありますか? または、null チェックは、値の型 (System.Integer など) をチェックしているのか、オブジェクトをチェックしているのかを常に予測する必要がありますか?
私が探しているのは、考えられるすべての種類のヌル性をチェックする関数だと思います。つまり、
a) 宣言されてから値が割り当てられていない
b) (データベースから取得した) データ オブジェクトから null 値が割り当てられた
c) null である別の変数値に等しく設定された
d) 設定されていない、または有効期限が切れていない ASP.NET セッション/アプリケーション変数に設定された。
.NET で null シナリオを処理する場合の一般的なベスト プラクティスはありますか?
更新:値の型が「null」であることについて話すとき、私が実際に意味するのは、値の型が設定されていないか、ある時点で null オブジェクトに等しいかキャストされた値の型です。
c# - このコードがC#で無効なのはなぜですか?
次のコードはコンパイルされません。
エラー1「System.DBNull」と「string」の間に暗黙の変換がないため、条件式のタイプを判別できません。
これを修正するには、次のようなことを行う必要があります。
これは確かに合法であるため、このキャストは無意味に思えます。
三項分岐のタイプが異なる場合、コンパイラは値をタイプオブジェクトに自動ボックス化しないようですが、同じタイプの場合、自動ボックス化は自動的に行われます。
私の考えでは、最初のステートメントは合法である必要があります...
コンパイラがこれを許可しない理由と、C#の設計者がこれを選択した理由を誰かが説明できますか?これはJavaでは合法だと思います...これは確認していませんが。
ありがとう。
編集: JavaとC#がこれを異なる方法で処理する理由、これを無効にするC#のシーンの下で何が起こっているのかを理解してください。私は三元の使い方を知っていて、例をコーディングするための「より良い方法」を探していません。C#の3値のルールは理解していますが、なぜ...
編集(Jon Skeet):この質問にはボクシングが含まれていないため、「autoboxing」タグを削除しました。
c# - C#ADO.NET:nullとDbNull-より効率的な構文はありますか?
をDateTime?
使用してフィールドに挿入しようとしているものがありDbParameter
ます。私は次のようにパラメータを作成しています:
そして、 sを考慮しながらDateTime?
の値をwhileに入れたいと思います。dataPrm.Value
null
私は最初は賢いと思いました:
しかし、それはエラーで失敗します
演算子'??' タイプ「System.DateTime?」のオペランドには適用できません。および「System.DBNull」
したがって、2番目の引数が最初の引数のnull許容でないバージョンである場合にのみ機能すると思います。それで私は行きました:
しかし、それも機能しません:
'System.DateTime'と'System.DBNull'の間に暗黙の変換がないため、条件式のタイプを判別できません。
しかし、私はそれらのタイプ間で変換したくありません!
これまでのところ、私が仕事に取り掛かることができるのは次のとおりです。
それは本当に私がこれを書くことができる唯一の方法ですか?三項演算子を使用してワンライナーを機能させる方法はありますか?
更新:なぜ私は本当にわかりませんか?バージョンが機能しません。MSDNによると:
?? 演算子は、nullでない場合は左側のオペランドを返し、そうでない場合は右側のオペランドを返します。
それがまさに私が欲しいものです!
Update2:それは最終的には明らかでした:
.net - DBNull をチェックしてから変数に代入する最も効率的な方法は?
この質問は時々出てきますが、満足のいく答えを見たことがありません。
典型的なパターンは次のとおりです (行はDataRowです)。
私の最初の質問は、どちらがより効率的かということです (私は条件を反転させました):
これは、 .GetType() の方が高速であることを示していますが、コンパイラは私が知らないいくつかのトリックを知っているのではないでしょうか?
2 番目の質問です。row["value"] の値をキャッシュする価値はありますか、それともコンパイラはインデクサーを最適化しますか?
例えば:
ノート:
- 行["値"]が存在します。
- 列の列インデックスがわかりません (したがって、列名の検索)。
- DBNullのチェックと割り当てについて具体的に尋ねています(時期尚早の最適化などではありません)。
いくつかのシナリオのベンチマークを行いました (秒単位の時間、10,000,000 回の試行):
Object.ReferenceEquals は "==" と同じパフォーマンスです
最も興味深い結果は?大文字と小文字を区別して列の名前を一致させない場合 (たとえば、「値」ではなく「値」にすると、(文字列の場合) 約 10 倍の時間がかかります。
この話の教訓は、インデックスで列を検索できない場合は、インデクサーに渡す列名が DataColumn の名前と正確に一致していることを確認することです。
値のキャッシュも、ほぼ2 倍高速に表示されます。
したがって、最も効率的な方法は次のようです。
vb.net - vb.netでdbnullデータを処理する
MS-Accessデータベースから取得され、 DataTableオブジェクト/変数myDataTableに格納されたデータのフォーマットされた出力を生成したいと思います。ただし、myDataTableの一部のフィールドにはdbNullデータが含まれています。したがって、次のVB.netコードスニペットでは、lastname、initals、またはsIDのいずれかのフィールドの値がdbNullの場合、エラーが発生します。
したがって、この質問のようにデータがdbNullであるかどうかを毎回チェックすることなく、フィールドにdbNullが含まれている可能性がある場合に、上記のコードを機能させるにはどうすればよいですか?
c# - POCO オブジェクトの Not-Null 制約
私は現在、金融アプリケーションを作成しており、非常に標準的な顧客テーブルがあります。多くの必須フィールドと、Cell/Fax などのオプション フィールドで構成されています。NHibernate を ORM として使用しており、すべてのマッピングが正しく行われています。すでに機能しています。
コメントせずにフィールドがnullではないことをコードで「表現」するにはどうすればよいのでしょうか。これを文書化した hbm.xml ファイルがありますが、このようなことを調べるのはちょっと厄介です。
他に思いつくのは、レポジトリが自分のロジックで NHibernate 例外をスローしないようにすることです。そのため、コントローラーで検証ルートに進む必要があるかもしれません。それでも、一部のフィールドが null になる可能性があることを POCO コードで表現するにはどうすればよいでしょうか?
ご覧のとおり、携帯電話とファックスはオプション、電話は必須にしたいと考えています。これらはすべて単なる複合マッピングであるため、マッピング ファイルでは、それぞれの単一要素が非 null でなければならないことを指定しているだけですが、NullReferenceException が発生するのを避けるために、Person.Cellular != null チェックを常に実行するのは嫌いです。
c# - What is the best practice for handling null int/char from a SQL Database?
I have a database that hold's a user's optional profile. In the profile I have strings, char (for M or F) and ints.
I ran into an issue where I try to put the sex of the user into the property of my Profile object, and the application crashes because it doesn't know how to handle a returned null value.
I've tried casting the data to the appropriate type
#xA;Which didn't fix my problem. I then tried changing the types to Nullable and Nullable and get conversion issues all the same. My current solution that I was able to find is the following:
#xA;Is there a simpler or better way to do this? Or am I pretty much on the right track?
.net - XSD DataSet で DBNull から Boolean への変換を処理するにはどうすればよいですか?
私のデータベースでは、テーブルの 1 つにビット (ブール) 値の列がいくつかあります。フィールドには常にデータが含まれているとは限らないため、NULL にすることができます。
テーブルを使用して XSD DataSet を作成するプロセスを完了し、AllowDBNull フィールドが True に設定されていることを確認しました。
ただし、構成された GetData メソッドを使用してデータベースからデータテーブルにダウン レコードをプルすると、次のエラーが発生します。
列の DefaultValue フィールド以外に何かを指定する必要がありますか? または、設定する他のフィールドがありますか?
私はまだこのプロジェクトの開発段階にあるので、フィールドを char に変更し、Y/N/NULL オプションを使用することをお勧めしますが、その方法に反対することはあまりありません。