【问题标题】:A simple VB.net SQL data query that is not returning any records一个不返回任何记录的简单 VB.net SQL 数据查询
【发布时间】:2010-10-28 15:07:47
【问题描述】:

我正在尝试调试我的代码,其中涉及一个简单的 web 服务,它将参数传递给一个数据类,该类调用一个存储的过程,并返回一行记录。我没有收到任何错误消息,但我也没有收到任何记录。

我的网络服务代码是:

<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  

【问题讨论】:

  • 不是一个答案,但你没有提到你返回一些东西,然后你想处理并关闭其他东西吗?!看看 using 关键字和 try/catch/finally。
  • 如果你在 SSMS 中使用相同的输入执行存储过程,你会得到记录吗? (又名,您确定错误在您的代码中,而不是在您的存储过程中吗?)
  • 是的,记录在SSMS中返回

标签: vb.net sql-server-2005 .net-2.0


【解决方案1】:

我的假设是您的存储过程只返回一个字符串值。我认为您的问题不在于您的程序没有返回任何数据。

更改以下内容:

GetHeaderValues = retDataSet.ToString()

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

原因如下。如果您希望数据库中的此过程只是一个字符串,则不必返回整个数据集,但这没关系。数据集比从中获取字符串值要复杂一些。它可以包含许多表(这就是通常使用它的原因),并且可以允许您更改数据(您没有这样做)。您可能想使用命令的 .ExecuteScalar 进行研究。我假设您的只有一个,因此您可以将其称为 .Table(0) 或者您可以将零替换为表的名称(您没有。)。在每个表中,都有行和列。同样只有一行和一列,因此我们可以将它们引用为行(0)和列(0)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多