Простой запрос данных VB.net SQL, который не возвращает никаких записей - PullRequest
0 голосов
/ 28 октября 2010

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

Мой код веб-сервиса:

<WebMethod()> _
Public Function GetDataValues(ByVal AutoVIN As String, ByVal OrderID As String, ByVal StatusCode As String, ByVal DivisionID As String) As String
    Dim oGetHeaderValue As New clsGetHeaderValue

    Dim GetHeaderValues As String = ""

    Dim strAutoVIN = Trim(AutoVIN)
    Dim strOrderID = Trim(OrderID)
    Dim strStatusCode = Trim(StatusCode)
    Dim strDivisionID = Trim(DivisionID)

    Try
        'Validate user entries if they are the correct length;
        If Not IsNumeric(strAutoVIN) Or Len(Trim(strAutoVIN)) <> 3 Then
            Throw New SoapException("Invalid Auto VI Number", SoapException.ClientFaultCode)
        End If

        'OrderID could be 12 digits in length
        If Not IsNumeric(strOrderID) Then
            Throw New SoapException("Invalid Order ID", SoapException.ClientFaultCode)
        End If

        '************************Verify if the order exists "Order Number not in requested status" in table Auto.orderHeader
        '************************Validate entries against db table;

        'Call Stored Proc and pass parameters;
        Dim retDataSet As Data.DataSet
        retDataSet = oGetHeaderValue.GetHeaderValue(strAutoVIN, strOrderID, strStatusCode, strDivisionID)

        GetHeaderValues = retDataSet.ToString()
        Return GetHeaderValues

    Catch ex As Exception
        Return "<ERR>" & ex.Message.ToString & "</ERR>"
    End Try
End Function

Код класса моей базы данных:

Public Function GetGetHeaderValue(ByVal sAutoVIN As String, ByVal sOrderID As String, ByVal sStatusCode As String, ByVal sDivisionID As String) As DataSet
Dim sqlDA As New SqlDataAdapter
Dim ds As New DataSet
Dim sqlcmd As New SqlCommand

Dim conn As New SqlConnection(strCN_Auto)

sqlDA = New SqlDataAdapter("uspExportOrders", conn)
sqlDA.SelectCommand.CommandType = CommandType.StoredProcedure

sqlDA.SelectCommand.Parameters.Add(New SqlParameter("@AutoVIN", SqlDbType.VarChar, 3))
sqlDA.SelectCommand.Parameters("@AutoVIN").Value = sAutoVIN

sqlDA.SelectCommand.Parameters.Add(New SqlParameter("@OrderID", SqlDbType.VarChar, 12))
sqlDA.SelectCommand.Parameters("@OrderID").Value = sOrderID

sqlDA.SelectCommand.Parameters.Add(New SqlParameter("@StatusCode", SqlDbType.VarChar, 10))
sqlDA.SelectCommand.Parameters("@StatusCode").Value = sStatusCode

sqlDA.SelectCommand.Parameters.Add(New SqlParameter("@DivisionID", SqlDbType.VarChar, 3))
sqlDA.SelectCommand.Parameters("@DivisionID").Value = sDivisionID

sqlDA.Fill(ds) 'Fill the DataSet with the rows returned.

Return ds

sqlDA.Dispose()
    conn.Close()
End Function  

1 Ответ

1 голос
/ 29 октября 2010

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

Изменить следующее:

GetHeaderValues = retDataSet.ToString()

до

Dim dr As DataRow
dr = retDataSet.Tables(0).Rows(0)
GetHeaderValues = dr(0).ToString()

Вот почему. Если все, что вы хотите от этой процедуры в вашей базе данных, это одна строка, вам не нужно возвращать и весь набор данных, но это нормально. Набор данных немного сложнее, чем просто получить из него строковое значение. Он может содержать много таблиц (именно поэтому он обычно используется) и может позволить вам изменить данные (что вы не делаете). Вы можете исследовать, используя команду .ExecuteScalar. Я предположил, что у вас есть только один, поэтому вы можете ссылаться на него как .Table (0) или вы можете заменить ноль на имя таблицы (которой у вас нет). В каждой таблице есть строки и столбцы. Опять же только одна строка и один столбец, поэтому мы можем ссылаться на них как row (0) и column (0).

...