2017-01-27 3 views
1

正しくありません:戻り値は、私はSQL Serverの2016年に、このストアドプロシージャを持っている

SET NOCOUNT ON; 
SELECT * FROM MyTable; 
RETURN @@ROWCOUNT 

私はSSMSで、この手順を実行すると、それがあるべきな戻り値は、43です。

私は自分のアプリケーションでこのコードスニペットがあります:最初の列内のすべてのデータWhileループプリントで

com = New SqlCommand("MyQuery", conn) 
com.CommandType = CommandType.StoredProcedure 
prm = New SqlParameter 
With prm 
    .DbType = DbType.Int32 
    .Direction = ParameterDirection.ReturnValue 
End With 
com.Parameters.Add(prm) 
conn.Open() 
Dim rdr As SqlDataReader = com.ExecuteReader 
While rdr.Read 
    Debug.WriteLine(rdr(0)) 
End While 
Debug.Write(prm.Value Is Nothing) 

デバッグ文のアウトをので、私はそれがすべて一緒に働いている知っているが、最終的なデバッグの結果ステートメントはTrueです。なぜ戻り値が得られないのですか?

EDIT: 答えは私のアプリケーションコードであり、SQLではありません。 SQLをそのまま残して、prmループ内の2行目を次のように変更してコードを修正しました。RetValに戻り値が含まれています。今はそれが理にかなっていることは明らかです。

+0

を使用して@RetValを設定してみてください、その後動作しない場合は? –

+0

はい、行数のみ、またはデータと行数の両方が必要ですか? – Amir

+0

私が正しければ、 "ReturnValue"はストアドプロシージャのためのものです。通常のSELECTを実行している場合、返される値はDataReaderのフィールドです。 – muffi

答えて

0

は少しあなたのストアドプロシージャを変更してみてください。

DECLARE @RetVal int 
SET NOCOUNT ON; 
SELECT * FROM MyTable; 
SET @RetVal = @@ROWCOUNT 
RETURN @RetVal 

これはあなただけのテーブルの行数を必要とする

SELECT @RetVal = COUNT(*) FROM MyTable 
+0

これを答えとしてマークするつもりです。実際に行数を戻す方法を再考する必要があったからです。その答えは私のOPへの編集にあります。 – SezMe

0

以下のようにクエリを更新してください。

SELECT * FROM MyTable; 
SELECT @@ROWCOUNT as Row_Count 

SPを更新した後、データセットでデータを取得し、データセットの2番目のテーブルで行カウントの値を取得します。

+0

私はSkippyの提案を最初に試して、私が得ることができるものを見てみましょう、今私はデータセットを使用しないでください。 – SezMe

関連する問題