ExecutesCalarは、1を返す保存されたProcを呼び出すときにnullReferenceExceptionをスローします

StackOverflow https://stackoverflow.com/questions/4727756

質問

この質問を投稿する前にいくつかの調査を行ってきましたが、データが返されない場合、ExecutesCalarがSystem.NullReferenceExceptionをスローするという事実を知っています。そのため、保存されたPROCを「Return 1」に変更したため、返品値が保証されています。ただし、NULL参照例外はまだ取得されています。

そこで、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;
            }
        }

ありがとう!

役に立ちましたか?

解決

ランダムな推測

returnを使用しているので、executescalarの列1、行1を読むデータセットはありません

選択または出力パラメーターを使用します

編集:実際、それほどランダムではありません

RETURN 1 結果セットではありません:それは「特別な」パラメーターです

sqlCmd.Parameters.Add(New SqlParameter("RETURN_VALUE", SqlDbType.Int)).Direction = ParameterDirection.ReturnValue

他のヒント

@gbnが言ったことについて詳しく説明します。 SQLコードを実行すると、3つの異なる方法で情報を返すことができます。 OUTPUT パラメーター、表形式データ、および/または単一 RETURN 価値。 @gbnが言ったように、 RETURN 値は本質的に専門化されています OUTPUT パラメーター。 ExecuteScalar 表形式のデータ、つまり最初の行の最初の列からの情報のみが表示されます。電話をかけたときに表形式のデータが受信されない場合 ExecuteScalar 代わりにヌル値が返されます。このヌル値で何かをしようとすると、明らかにNREが得られます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top