この質問を投稿する前にいくつかの調査を行いましたが、データが返されないときにExecuteScalarがSystem.NullReferenceExceptionをスローするという事実を認識しています。そのため、私はストアドプロシージャを "return 1"に変更して戻り値が保証されているのです。しかし、私はまだNULL参照例外を取得しています。ExecuteScalarは、1を返すストアドプロシージャを呼び出すとNullReferenceExceptionをスローします
だから私は、データを持つテーブルを照会するためにSqlCommandオブジェクトを使用しようとしました:
SqlCommand sqlCommand = new SqlCommand("SELECT * FROM ATableThatHasValues", conn)
私はスカラーを実行実行したとき、私は私がデータベースを照会する権限を持って知っているので、値を拾うことができました。私はこれが私が逃したいくつかの特定の格納されたproc権限設定であると思われますか?
私は一日のうちにこれに固執していたので、本当にコメント/提案を感謝します。 :(
私のコードは次のようになります。
using (SqlConnection sqlConnection = new SqlConnection(connectionString))
{
sqlConnection.Open();
using (SqlCommand sqlCommand = new SqlCommand("GetSomeValue", sqlConnection))
{
sqlCommand.CommandType = CommandType.StoredProcedure;
//sqlCommand.Parameters.Add(new SqlParameter("@Id", this.ID));
//sqlCommand.Parameters.Add(new SqlParameter("@State", 1 /* active */));
byte retValue = (byte)sqlCommand.ExecuteScalar();
return retValue;
}
}
THANKS
どのラインが例外を投げるのですか?スタックトレースはどこですか? – asawyer
あなたは 'ExecuteScalar'の目的を理解していますか?データの最初の行の最初の列を返し、それ以外はすべて無視されます。あなたが 'SELECT * 'と共にそれを使用している理由はありますか? –