[C#] SqlCommand.ExecuteScalar の戻り値が Null
あまり意識していなかったのだが、少々ハマった。
SqlCommand.ExecuteScalar メソッド は「クエリを実行し、そのクエリが返す結果セットの最初の行にある最初の列を返します」とある。SQL でカウントなど の集計値を取る場合に使うことがあるが、サンプルを見ると、以下のようになっている。
SqlCommand.ExecuteScalar メソッド は「クエリを実行し、そのクエリが返す結果セットの最初の行にある最初の列を返します」とある。SQL でカウントなど の集計値を取る場合に使うことがあるが、サンプルを見ると、以下のようになっている。
cmd.CommandText = "SELECT COUNT(*) FROM dbo.region"; Int32 count = (Int32) cmd.ExecuteScalar();しかし、結果セットがない場合(レコード件数ゼロ)、上記の式だと Int に変換できずに System.NullReferenceException (オブジェクト参照がオブジェクト インスタンスに設定されていません)が発生する。
Int32 count = (Int32) cmd.ExecuteScalar(); cmd.CommandText = "SELECT COUNT(*) FROM dbo.region"; object value = cmd.ExecuteScalar(); if (firstColumn != null) { count = Convert.ToInt32(value); }クエリ次第なところがあるのだろうが、やはり一旦チェックは行ったほうが良いのではないか?