ms sql хранимая процедура возвращает данные без вывода - PullRequest
4 голосов
/ 16 марта 2012

Привет всем, я пытаюсь найти примеры получения данных из хранимой процедуры, которая не имеет отправленных ей параметров и не имеет возвращаемых выходных параметров. Хотя он отображает данные.

Как я могу получить это из своего кода, который я использую ниже?

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, которое я просто положил туда, чтобы увидеть, что произойдет, но я ничего не получил.

Любая помощь будет отличной!

David

Ответы [ 2 ]

3 голосов
/ 16 марта 2012

Если вы назначите параметр для своей команды, тогда ваша хранимая процедура должна принять параметр. Кроме того, если вы указываете направление как 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 голосов
/ 16 марта 2012

Вот документация MSDN о считывании данных с использованием ADO datareader. Я думаю, что их пример объясняет это довольно хорошо, поэтому я просто скопировал и вставил пример здесь. Просто замените настройку SQL, и тогда вам просто нужно вызвать ExecuteReader, после чего следует цикл while, который выполняется, пока reader.Read находит строки. Прямо в цикле вы можете получить доступ к столбцам через 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
...