2012-01-06 23 views
0

こんにちは、私はVB.netを使用して呼び出すSPからの応答を返すために探しています。これはちょうどそれを行うための私のコードです:ストアドプロシージャからの応答の取得

connection.Open() 
    command.CommandType = CommandType.StoredProcedure 
    command.CommandText = "RPT_C_S_H"   
    command.Parameters("@theOutput").Direction = ParameterDirection.Output 'returns 0 if bad, 1 if good 
    Dim dataReader As SqlDataReader = command.ExecuteReader() 

だから今私はちょうど戻り値を得るために

dim returnedValue as integer = 0 

Do While dataReader.Read() 
    returnedValue = dataReader(0) 
Loop 

をしますか?

助けがあれば助かります。ありがとう!

デビッド

UPDATE

connection.Open() 
command.CommandType = CommandType.StoredProcedure 
command.CommandText = "RPT_C_S_H" 
Dim sqlParReturn As System.Data.SqlClient.SqlParameter = command.Parameters.Add("@theOutput", SqlDbType.SmallInt) 
sqlParReturn.Direction = ParameterDirection.ReturnValue 
command.ExecuteNonQuery() 
Dim returnedValue As Integer = CInt(sqlParReturn.Value) 

UPDATE#2

Dim sqlParReturn1 As System.Data.SqlClient.SqlParameter = command.Parameters.Add("@Error_Code", SqlDbType.Int) 
    Dim sqlParReturn2 As System.Data.SqlClient.SqlParameter = command.Parameters.Add("@Err_Msg", SqlDbType.VarChar) 
    Dim sqlParReturn3 As System.Data.SqlClient.SqlParameter = command.Parameters.Add("@result", SqlDbType.Bit) 

    sqlParReturn1.Direction = ParameterDirection.Output 
    sqlParReturn2.Direction = ParameterDirection.Output 
    sqlParReturn3.Direction = ParameterDirection.Output 

    command.ExecuteNonQuery() 
    Dim returnedValue1 As String = sqlParReturn1.Value 
    Dim returnedValue2 As String = sqlParReturn2.Value 
    Dim returnedValue3 As String = sqlParReturn3.Value 

SPは次のよ​​うになります。

ALTER PROCEDURE [dbo].[CSS_SP_Job_Return] (
    @job INT, 
    @UserID VARCHAR(50), 
    @Printer_Name VARCHAR(30), 
    @Error_Code int OUTPUT, 
    @Err_Msg varchar (1000) OUTPUT, 
    @result BIT OUTPUT 
) 

私はエラーを取得しておいてください。文字列は、[4]サイズプロパティが0

の無効なサイズを持っていることは何を意味するのでしょうか?

答えて

1

私は、プロシージャにINTを返し、結果を得るためにExecuteScalarを実行する方がより好きです。

1

あなたはSQLパラメータから値を読み出すために、このような何かをするだろう:

Do While dataReader.Read() 
    '' do something with your data here! 
Loop 

Dim value = command.Parameters("@theOutput").Value 

しかし、あなたはあなたを想定して(あなたのデータリーダーからすべての行を読んで完了したした後に、こののみ動作しますが実際にSELECTステートメントを使用して、いくつかのデータを返さないストアド・プロシージャ - **そうでない場合は代わりに、データリーダーのcommand.ExecuteNonQuery()を使用)

+0

SPでのリターンはこのようなものですがSET @theOutput = 1 ** – StealthRT

+0

私は**入れてしまうでしょうD im value = command.Parameters( "@ theOutput")。値** AFTER ** command.ExecuteNonQuery()**またはBEFORE? – StealthRT

+0

@StealthRT:まず、保存したプロシージャのみを実行する必要があります**その後**出力パラメータを取得できます。 –

関連する問題