【问题标题】:Getting response from a stored procedure从存储过程中获取响应
【发布时间】:2012-01-06 04:41:29
【问题描述】:

大家好,我希望收到来自我使用 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

为了得到返回值?

任何帮助都会很棒!谢谢!

大卫

更新

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
  )

我不断收到错误消息:String[4] size 属性的大小无效为 0

这是什么意思?

【问题讨论】:

    标签: sql vb.net stored-procedures parameters sql-server-2008-r2


    【解决方案1】:

    我更倾向于让您的过程返回一个 INT 并执行一个 ExecuteScalar 以获得结果。

    【讨论】:

      【解决方案2】:

      你会做这样的事情来从 SQL 参数中读出值:

      Do While dataReader.Read()
           '' do something with your data here!
      Loop
      
      Dim value = command.Parameters("@theOutput").Value
      

      但这只会在您完成从数据阅读器中读取所有行之后起作用(假设您的存储过程确实确实使用SELECT返回了一些数据声明 - 否则使用 command.ExecuteNonQuery() 而不是数据读取器)

      【讨论】:

      • SP中的返回是这样的SET @theOutput = 1
      • 我会将 Dim value = command.Parameters("@theOutput").Value 放在 command.ExecuteNonQuery() 之后还是之前?
      • @StealthRT:首先,您需要执行存储的过程 - 只有之后您才能获取输出参数......跨度>
      • 所以 command.ExecuteNonQuery() 首先然后我执行 Dim value = command.Parameters("@theOutput").Value对吗?
      • 或者你是说先做 Dim value = command.Parameters("@theOutput").Value 以保存输出一次 command.ExecuteNonQuery() 在它之后执行。
      猜你喜欢
      • 2017-01-01
      • 2016-08-04
      • 2018-03-04
      • 2011-04-26
      • 2012-07-13
      • 1970-01-01
      • 1970-01-01
      • 2017-01-28
      • 2013-01-22
      相关资源
      最近更新 更多