不返回任何记录的简单VB.net SQL数据查询
我正在尝试调试我的代码,这涉及一个简单的Web服务,它将参数传递给一个数据类,该数据类调用一个存储的进程,并返回一行记录。我没有收到任何错误消息,但我也没有收到任何记录 我的Web服务代码是:不返回任何记录的简单VB.net SQL数据查询,vb.net,sql-server-2005,.net-2.0,Vb.net,Sql Server 2005,.net 2.0,我正在尝试调试我的代码,这涉及一个简单的Web服务,它将参数传递给一个数据类,该数据类调用一个存储的进程,并返回一行记录。我没有收到任何错误消息,但我也没有收到任何记录 我的Web服务代码是: <WebMethod()> _ Public Function GetDataValues(ByVal AutoVIN As String, ByVal OrderID As String, ByVal StatusCode As String, ByVal DivisionID As Str
<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
我的假设是,存储过程只返回一个字符串值。我不认为你的问题在于你的程序不返回任何数据 更改以下内容:
GetHeaderValues = retDataSet.ToString()
到
原因如下。如果数据库中的这个过程只需要一个字符串,则不必返回整个数据集,但这没关系。数据集比仅仅从中获取字符串值要复杂一些。它可以包含许多表(这就是它通常被使用的原因),并允许您更改数据(您没有这样做)。您可能需要使用命令的.ExecuteScalar进行研究。我假设您的表只有一个,所以您可以将其称为.Table(0),或者您可以将零替换为表名(您没有)。在每个表中,都有行和列。同样,只有一行和一列,因此我们可以将它们引用为行(0)和列(0)。不是答案,但您没有提到您返回了一些内容,然后您想处理并关闭其他内容吗?!请看一下如何使用关键字并尝试/catch/finally。如果您在SSMS中使用相同的输入执行存储过程,是否会恢复记录?(又名,您确定错误在您的代码中而不是存储过程中吗?)是的,记录在SSMS中返回
Dim dr As DataRow
dr = retDataSet.Tables(0).Rows(0)
GetHeaderValues = dr(0).ToString()