【问题标题】:ms sql stored procedure return data without outputms sql存储过程返回数据不输出
【发布时间】:2012-04-01 15:22:37
【问题描述】:

嘿,我正在尝试查找从没有向其发送参数也没有任何返回的输出参数的存储过程中获取数据的示例。虽然它确实显示数据。

我怎样才能从我下面使用的代码中得到它?

Dim myCommandSQL As New SqlCommand
    Dim myReaderSQL As SqlDataReader = Nothing
    Dim intX As Integer = 0
    Dim connSql As SqlConnection

    Try
        connSql = New SqlConnection("Server=sqlprod;" & _
                                    "Database=ISS3_PROD;" & _
                                    "User ID=xxx;" & _
                                    "Password=xxx;" & _
                                    "Trusted_Connection=False;")
        connSql.Open()

        myCommandSQL.CommandType = CommandType.StoredProcedure
        myCommandSQL.CommandText = "Select_Prod"

        Dim sqlParReturn1 As System.Data.SqlClient.SqlParameter = myCommandSQL.Parameters.Add("@return_value", SqlDbType.VarChar)

        sqlParReturn1.Direction = ParameterDirection.Output
        myCommandSQL.ExecuteNonQuery()

        MsgBox(sqlParReturn1)

        connSql.Close()
        myCommandSQL.Dispose()

@return_value 我只是放在那里看看会发生什么,但我什么也没返回。

任何帮助都会很棒!

大卫

【问题讨论】:

    标签: sql vb.net stored-procedures parameters parameter-passing


    【解决方案1】:

    如果你为你的命令分配一个参数,那么你的存储过程应该有一个参数。此外,如果将方向指定为Output,则应在存储过程中将该参数标记为OUTPUT

    如果您只想要不带任何参数的存储过程的结果,请删除所有包含sqlParReturn1 的行。此外,您的命令不是“非查询”——您正在查询数据。要获得它,您应该这样做(我还使用一些更好的实践技术重构了您的代码):

    Using connSql As SqlConnection = New SqlConnection(...)
        connSql.Open()
        Using myCommandSQL As SqlCommand = connSql.CreateCommand()
            myCommandSQL.CommandType = CommandType.StoredProcedure
            myCommandSQL.CommandText = "Select_Prod"
            Using reader As SqlDataReader = myCommandSQL.ExecuteReader()
                If reader.HasRows Then
                    While reader.Read()
                        // loops through the rows returned
                    End While
                End If
            End Using
        End Using
     End Using
    

    【讨论】:

      【解决方案2】:

      这是使用 ADO 数据读取器读取数据的MSDN documentation。我认为他们的示例很好地解释了这一点,因此我只是在此处复制并粘贴了示例。只需替换您的 SQL 设置,然后您只需调用 ExecuteReader,然后在 reader.Read 查找行时运行 while 循环。就在循环内部,您可以使用序号或列名通过reader.Get... 访问您的列。

      Private Sub HasRows(ByVal connection As SqlConnection)
          Using connection
              Dim command As SqlCommand = New SqlCommand( _
                "SELECT CategoryID, CategoryName FROM Categories;", _
                connection)
              connection.Open()
      
              Dim reader As SqlDataReader = command.ExecuteReader()
      
              If reader.HasRows Then
                  Do While reader.Read()
                      Console.WriteLine(reader.GetInt32(0) _
                        & vbTab & reader.GetString(1))
                  Loop
              Else
                  Console.WriteLine("No rows found.")
              End If
      
              reader.Close()
          End Using
      End Sub
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-05-16
        • 1970-01-01
        • 2016-10-30
        • 2020-08-03
        • 1970-01-01
        • 2018-08-20
        • 1970-01-01
        相关资源
        最近更新 更多