2016-11-24 43 views
1

SQLクエリの結果をint変数に取得しようとしていますが、オブジェクト参照エラーが発生しています。誰かが私を助けてくれますか?ExecuteScalar()の戻り値でエラーが発生しました

oconn = new SqlConnection(oSession.CONNECTION_STRING); 
oconn.Open(); 

objCmd.CommandText = "select Rule_Approval_Selection from UserFile where uid=" + intUserID; 
int value = (Int32)(objCmd.ExecuteScalar()); 
oconn.Close(); 
+2

...これを試してみてくださいまあ、何かが私は 'objCmd'または' oSession'を推測、nullです。デバッガはすばらしいツールです –

+0

これは間違いなく重複していません。 'objCmd'も' oSession'も 'null'です。 – dasblinkenlight

+0

@dasblinkenlight:それは良いことです。あなたのクリスタルボールはあなたに言った? –

答えて

5

ExecuteScalar()戻りnullをコマンドには行がありません。あなたの場合、intUserIdが既存のユーザーに対応していない場合、nullが返されます。この問題を処理するためのint?

スイッチ:

int? value = (Int32?)(objCmd.ExecuteScalar()); 

intUserIdがデータベースに存在するときに、変数valueが非nullに設定されます。それ以外の場合はnullとなります。

+0

[dasblinkenlight](http://stackoverflow.com/users/335858/dasblinkenlight)例外は 'ExecuteScalar()'関数にはないので、そうです。この[MSDN記事](https://msdn.microsoft。 com/en-us/library/system.data.sqlclient.sqlcommand.executescalar(v = vs.110).aspx#例外)、ExecuteScalar例外のリストがあります。 – Yahfoufi

+0

'InvalidCastException'が発生したと考えられましたが、値の型を解除すると' NullRefernceException'が発生します。これは、[ここ](https://msdn.microsoft.com/en-us/library/yz2be5wk.aspx)に記載されています:_ "'ヌルをアンボックスしようとすると、 'NullReferenceException'が発生します。互換性のない値への参照をアンボックスしようとしています型は 'InvalidCastException'を引き起こします。" _ –

0
oconn = new SqlConnection(oSession.CONNECTION_STRING); 
oconn.Open(); 
objCmd.CommandText = "select Rule_Approval_Selection from UserFile where uid="  + intUserID; 
var x=objCmd.ExecuteScallar(); 
if (x!= null && DBNull.Value != x) 
{ 
int value = (Int32)(objCmd.ExecuteScalar()); 
} 

oconn.Close(); 

関連する問題