2017-10-15 7 views
0

私はこのコードを持っている:代入がnullを返す場合、変数を強制的に0にする方法はありますか?

var btns = "(BTNACOUNT + BTNBCOUNT + BTNCCOUNT + BTNDCOUNT)"; 
int abc = db2.ExecuteScalar<int>("SELECT " + btns + " FROM CLICKHISTORY WHERE YYMMDD = " + yymmdd); 

右のクエリが数またはnullを返します。

右側にnullが返された場合、abcの値を0に設定する方法はありますか?

+0

を使用してSQLステートメントをラップすることができます)、0) ' –

+1

「BTNACOUNT」、「BTNBCOUNT」、「BTNCCOUNT」、「BTNDCOUNT」のいずれかが「NULL」であれば、その合計も同様であることに留意してください。これらの列の名前で判断すると、私はあなたが望むものではない印象を受け取り、(1,2,3、NULL)を6に合計したいと思うでしょう。それは正しいのですか? – hvd

答えて

5

null coalescingオペレータ??使用します。

int abc = db2.ExecuteScalar<int>(...) ?? 0; 

をオペレータのLHSが非nullの場合、それがあることを返す - そう、それは(一種のデフォルトのような)RHSを返します。

また、ずっと同じことを行うが、より読みやすいですNullable<T>.GetValueOrDefault()Nullable<T>.GetValueOrDefault(T)は、あります:

int abc = db2.ExecuteScalar<int>(...).GetValueOrDefault(0); 
0

あなたはABCがDBNullあるかどうかを確認し、値を設定することができ 、DBNull代わりのnullを返すは、ExecuteScalar。

if(abs is DBNull) 
abc=0; 

代わり、あなたは既にSQLに `COALESCE((BTNACOUNT + BTNBCOUNT + BTNCCOUNT + BTNDCOUNTを使用していることをあなたが行うことができます@のhnegfatlの正しい答えの代わりとしてselect isnull((original statement...),0)

int abc = db2.ExecuteScalar<int>("select isnull((SELECT " + btns + " FROM CLICKHISTORY WHERE YYMMDD = " + yymmdd),0)"); 
関連する問題