2012-01-06 61 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