webservice vb.net读取数据sql server 2008 R2

时间:2016-04-08 11:51:02

标签: sql-server vb.net web-services sql-server-2008

当我想从sql server读取数据时,我的程序有2个问题。我的问题

  1. 当我想从sql server 2008读取数据类型varchar时,r2得到了这样的http://prntscr.com/apni8g错误,当我从sql中读取数据类型整数时没有错误。
  2. 我的代码

    <WebMethod()> _
    Public Function TopKill() As Integer
        Dim con As New SqlConnection
        con.ConnectionString = "Data Source=127.0.0.1;Initial Catalog=RF_World;Integrated Security=True"
        Dim killing As String
        con.Open()
        Dim cmd As New SqlCommand(("SELECT TOP 20 Name FROM tbl_pvporderview  Join tbl_base ON tbl_pvporderview.serial = tbl_base.Serial ORDER BY [Kill] DESC"), con)
        Dim killreader As SqlDataReader
        killreader = cmd.ExecuteReader()
        killreader.Read()
        If killreader.HasRows Then
            killing = killreader.Item("Name").ToString
        End If
        con.Close()
        Return killing
    End Function ' TOP 20 Killer
    
    1. 当我读取2个数据时,为什么只输出一个这样的http://prntscr.com/apnjnk
    2. 我的代码

      <WebMethod()> _
      Public Function TopKill() As Integer
          Dim con As New SqlConnection
          con.ConnectionString = "Data Source=127.0.0.1;Initial Catalog=RF_World;Integrated Security=True"
          Dim killing As String
          con.Open()
          Dim cmd As New SqlCommand(("SELECT TOP 20 [Kill], Death FROM tbl_pvporderview  Join tbl_base ON tbl_pvporderview.serial = tbl_base.Serial ORDER BY [Kill] DESC"), con)
          Dim killreader As SqlDataReader
          killreader = cmd.ExecuteReader()
          killreader.Read()
          If killreader.HasRows Then
              killing = killreader.Item("Kill").ToString
              killing = killreader.Item("Death").ToString
          End If
          con.Close()
          Return killing
      End Function ' TOP 20 Killer
      

      我不知道如何解决它。 我真的需要帮助来修复我的代码。 也许任何人都可以帮我修改我的代码

      之前感谢

2 个答案:

答案 0 :(得分:0)

我首先尝试删除SQL的TOP 20部分以查看是否抛出SqlDataReader,认为第一个字段是整数列。如果是,则尝试强制SQL将该字段解释为数字:SELECT TOP 20 CAST([Kill] AS NVARCHAR(20)), Death FROM tbl_pvporderview Join tbl_base ON tbl_pvporderview.serial = tbl_base.Serial ORDER BY [Kill] DESC

答案 1 :(得分:0)

查看您的功能

Public Function TopKill() As Integer

现在看看你要回来的东西

Dim killing As String
....
Return killing

你的函数期望返回一个Integer并且你传递一个String ..实际上是一个String数组

更改为

Public Function TopKill() As String

关于你的第二个问题

你正在用死亡写作杀戮价值......这个函数给出了答案,因为它是“可以”的。作为一个整数,所以VB为你做这个。

<强>更新

查看代码,您需要输出数据表而不是字符串(数组) 所以将功能改为

    <WebMethod> _
Public Function Function TopKill() As DataTable

    Dim con As New SqlConnection
    con.ConnectionString = "Data Source=127.0.0.1;Initial Catalog=RF_World;Integrated Security=True"
    Dim SelectQry As String = "SELECT TOP 20 Name FROM tbl_pvporderview  Join tbl_base ON tbl_pvporderview.serial = tbl_base.Serial ORDER BY [Kill] DESC"

    Dim da As New Sqldataadapter()
    Dim Command As New SqlCommand(SelectQry, con)
    da.selectedCommand = Command
    Dim dtresults As DataTable = newDataTable()

    Try
        con.Open()
        da.Fill(dtresults)
    Catch ex As Exception
        Throw ex
    Finally
        con.Close()
    End Try

    Return dtresults

End Function

返回的结果将是一个包含Top 20 Name,Kill和Death记录的数据表。