ms sql存储过程返回没有输出的数据

时间:2012-03-16 03:02:36

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

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

我如何从我的代码中使用以下内容获取该内容?

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我只是放在那里看看会发生什么,但我没有得到任何回报。

任何帮助都会很棒!

大卫

2 个答案:

答案 0 :(得分:3)

如果为命令分配参数,则存储过程应采用参数。此外,如果您将方向指定为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

答案 1 :(得分:2)

以下是使用ADO datareader读取数据的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