Получение ответа от хранимой процедуры - PullRequest
0 голосов
/ 06 января 2012

Привет всем, я жду ответа от 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

, чтобы получить возвращаемое значение?

Любая помощьбыло бы замечательно!Спасибо!

Дэвид

ОБНОВЛЕНИЕ

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

TheSP выглядит так:

  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] свойство size имеет недопустимый размер 0

Что это значит?

Ответы [ 2 ]

1 голос
/ 06 января 2012

Вы бы сделали что-то вроде этого, чтобы прочитать значение из параметра SQL:

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

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

Но это будет работать только после , когда вы завершили чтение всех строк из вашегосредство чтения данных (при условии, что ваша хранимая процедура действительно действительно возвращает некоторые данные, используя оператор SELECT - в противном случае используйте command.ExecuteNonQuery() вместо средства чтения данных)

1 голос
/ 06 января 2012

Я был бы более склонен к тому, чтобы ваша процедура возвращала INT и выполняла ExecuteScalar для получения результата.

...