SQL ServerデータベースでVARCHAR列を設定するためにINSERT文で使用されるパラメータを設定するコードは次のとおりです。私の値オブジェクト(iloという名前の)にはDescriptionというプロパティがあり、String.Emptyに初期化され、XMLから読み込まれた値に設定されるか、XML要素が空の場合はString.Emptyのままです。三項構文を使用してDBNull.Valueにパラメータを設定するとエラーになりますか?
データベースに挿入するとき、プロパティがまだString.Emptyに設定されている場合は、null値を挿入する必要があります。
database.AddInParameter(cmd, "@description", DbType.String,
(ilo.Description.Equals(string.Empty)) ?
DBNull.Value :
ilo.Description);
だから基本的に私はそうilo.Descriptionに設定し、ilo.DescriptionがString.Emptyをと等しい場合、DBNull.Valueをにパラメータを設定し、言っています。 「System.DBNull」と「文字列」
なぜ間には暗黙的な変換が存在しないため、これは、Visual Studioで次のエラーを与える
...条件式の
エラー141種類を決定することができないのですか?
好奇心の部分は、エラーなしで次のことができます。これは、上記のようなインライン条件構文を使用するのとまったく同じです。
if(ilo.Description.Equals(string.Empty))
{
database.AddInParameter(cmd, "@description", DbType.String, DBNull.Value);
}
else
{
database.AddInParameter(cmd, "@description", DbType.String, ilo.Description);
}
私は他の記事を検索し、下記のものを見つけましたが、実際に私の質問には答えません。
EntLib Way to Bind "Null" Value to Parameter
明白な回避策は、だけではなく、インラインの場合/ else文(三元)の構文を使用することですので、私は、なぜ、より興味がありますか?
このリンクにはある種の回答がありますが、これはうまくいきません。私はそれをバグと呼ぶだろう!
http://msdn.microsoft.com/en-us/library/ty67wk28.aspx
あなたは(http://stackoverflow.com/questions/4290203/simple-c-why-assigning-null-in-ternary-operator-fails [この回答に]三項演算子とこの種の問題についての詳細を得ることができます-no-implicit-conversion) – Steve
Steveに感謝します。あなたのリンクは私が本当に探していたものでした。私はこれが.NETの愚かな側面だと思う。それぞれの可能な結果の種類がステートメントに適合するかどうかを評価するだけではどうですか?つまり、オブジェクトo =(someBool)と言ったら? someInt32:someString;エラーが発生しますが、someStringをsomeInt32にキャストできるかどうかを評価するのではなく、両方の結果をObjectに暗黙的にキャストできるかどうか評価するのは簡単でしょうか?それは私には馬鹿だと思われますが、それはどういうものかと思います。ありがとう! – Jim
私はこのスレッドへの返答のスピードと正確さに非常に感銘を受けたことをコメントしたいと思います。このコミュニティは素晴らしいです!みんな、ありがとう! – Jim