ms sql存储过程返回数据不输出

Posted

技术标签:

【中文标题】ms sql存储过程返回数据不输出【英文标题】:ms sql stored procedure return data without output 【发布时间】: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 我只是放在那里看看会发生什么,但我什么也没返回。

任何帮助都会很棒!

大卫

【问题讨论】:

【参考方案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

【讨论】:

以上是关于ms sql存储过程返回数据不输出的主要内容,如果未能解决你的问题,请参考以下文章

从 MS SQL 中的 PHP PDO 存储过程中返回 Select *

PL-SQL 存储函数和存储过程

SQL一个带参数的存储过程写法

PL/SQL程序设计—— 存储函数&存储过程

MS sql如何使用存储过程?

MS Management Studio 中的存储过程返回数据。使用 C# 调用时不返回任何数据