2012-03-09 11 views
2

オプションパラメータとしてDBNull.Valueを渡すことは可能ですか? 私はC#オプションパラメータとしてDBNull.Value

private void CallSP(string param0, string param2 = DBNull.Value) 
{ 
} 

そのエラーを与えているでみました。私はこのメソッドでストアドプロシージャを呼び出す必要があるので、私はDBNull.Valueを渡しています。 SQL Serverでは 'DatabaseNull.Value'と 'null'は同じものとして扱われますか? 'DBNull.Value'の代わりに 'null'を渡さなければならないか???

+0

を「ヌルを使用することはありません」反対である - 'null'なのでを使用しない理由は絶対にありませんし、 SQLではnullと非常に異なるわけではありません - ヌル等価性だけが異なり、一貫性を持たせるのは簡単です。 –

+0

おそらくまた参照してください:http://stackoverflow.com/a/9632050/23354 –

答えて

8

DBNull.Valueない文字列であり、及び(オプションのパラメータ値は定数でなければならない)一定ありません。これを行う方法は、通常のnullにそれをデフォルトにし、パラメータ追加するときnullを処理することです:1ntello @

private void CallSP(string param0, string param2 = null) 
{ 
    ... 
    object value = (object)param2 ?? DBNull.Value; 
    // ^^^ use value in the parameter 
    ... 
} 
+2

+1、OPのために明示的に明示するだけです。頻繁に人を動かすので、パラメータ値をnullに設定すると、そのパラメータは渡されませんあなたはSqlExceptionで終わるだろう。 null!= DBNull.Value – AdaTheDev

+0

それは美しい解決策です.. –

+2

@AdaTheDev個人的に、私はまだDBNullの**存在**のための**説得力のある**理由を見つける必要がありません。私は多くの議論を見てきました。 –

関連する問題