2012-01-06 53 views
0

嘿,我希望收到SP使用VB.net調出的響應。這是我做的只是代碼:從存儲過程獲得響應

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) 

更新#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 2012-01-06 07:00:16

+0

我會放** d im value = command.Parameters(「@ theOutput」)。Value ** AFTER ** command.ExecuteNonQuery()**或BEFORE? – StealthRT 2012-01-06 07:02:40

+0

@StealthRT:首先,你需要**執行**存儲過程 - 只有**後,你可以抓住輸出參數.... – 2012-01-06 07:12:10