類似の質問がありましたが、回答は私が探していたものではありませんでした。参照がNULLまたは値がまだ割り当てられていない場合は、NULLの値をSQL Serverデータベースに挿入します。現時点ではnullをテストしているようです。.Net変数値からNULL値をSQL Serverデータベースに挿入します。
String testString = null;
if (testString == null)
{
command.Parameters.AddParameter(new SqlParameter("@column", DBNull.Value);
}
else
{
command.Parameters.AddParameter(new SqlParameter("@column", testString);
}
これは私には信じられないほどに不器用です。私はデータベースに挿入するかなりの値を持っており、上記のようなすべてをテストするのは非常に冗長です。 .Netは何らかの方法でこれを処理しませんか?私はStringとは違って文字列を使用していても動作するようには思われません。周りを見回すと、Nullable型の使用に関する記事が見つかりました。
System.Nullable<T> variable
これはプリミティブ、int?、charに対して機能するようです。ダブル?ブール?だから、それは文字列はどうですか?私はここで何かを逃していますかプリミティブ値と文字列値にどのような型を使用して、値を挿入する前に繰り返し値をテストする必要はありません。
編集: 前に、3値演算子に関する回答が多すぎます。私はそれらが好きですが、この文脈ではありません。その値をテストし、余分なロジックを持つ必要があるのは当然のことではありません。そのようなことが.Netフレームワークでは下位に実装されている可能性があります。無料で。
編集: さて、みんな私の攻撃計画を策定するのを助けます。私は私のプリミティブ(int?、double?など)にNullableを使用し、StringはStringを使用しますが、Stringは使用します。テスト。これは物事をより冗長に保ちます。私がここで紛失しているものがありますか?おそらくいくつかのセマンティクスを失うでしょうか?
コンパイラは、暗黙的にstringからDBNullに変換できないため、この問題を抱えています。 – LukeH
あなたは正しいです。文字列(x)をオブジェクトにダウンキャストする必要があります。編集された例。 –
.Netがパラメータの間違った型を推測するのが容易になるので、これのファンではありません。 'SqlDbType'列挙型を要求するオーバーロードを介してパラメータ型を指定する方が良いでしょう。 –