【问题标题】:How do I return a list of integers using a VB.NET function?如何使用 VB.NET 函数返回整数列表?
【发布时间】:2013-04-01 20:01:52
【问题描述】:

我正在编写一份 SSRS2005 报告,我需要使用一些 VB.NET 代码访问与报告中的数据库不同的数据库并返回整数列表(用户 ID)。我需要使用一些 VB.NET 代码来执行此操作。我有一些“有效”的代码,因为它不会引发任何错误并且我得到返回的值。但是,我只得到第一个值而不是整个列表。这是我目前所拥有的:

Public Function GetUsers(ByVal param As Integer) As String
Dim sqlCon As New System.Data.SqlClient.SqlConnection 
Dim cmd As New System.Data.SqlClient.SqlCommand
Dim dRet As String
Dim sCmdText As String

sqlCon.ConnectionString = "data source=myServer;initial catalog=myDatabase;Integrated Security=true"


cmd = New System.Data.SqlClient.SqlCommand
sCmdText = "SELECT UsersRowID FROM dbo.tvf_Get_Users(" 
'cmd.CommandType = CommandType.Text
cmd.Connection = sqlCon
cmd.CommandTimeout = 0

sCmdText = sCmdText & param
sCmdText = sCmdText & ")"

cmd.CommandText = sCmdText
If sqlCon.State <> System.Data.ConnectionState.Open Then
sqlCon.Open()
End If
dRet = cmd.ExecuteScalar() & ""     
sqlCon.Close()

Return dRet

End Function

我尝试过使用 DataSet 数据类型,但我收到了无法将 DataSet 转换为字符串的错误消息。

任何想法我需要做些什么才能让它工作?

【问题讨论】:

  • ExecuteScalar 总是只返回一个值。这就是“标量”的意思。看看mindfiresolutions.com/…
  • 如果你使用 ExecuteScalar 它将只返回一个值,请尝试使用 DataSet 或 DataReader 的 SqlDataAdapter
  • 谢谢罗伯特。就是这样。现在可以了。

标签: vb.net reporting-services reportingservices-2005


【解决方案1】:

修改你的代码如下

Public Function GetUsers(ByVal param As Integer) As String
'
Dim sqlCon As New System.Data.SqlClient.SqlConnection
Dim cmd As New System.Data.SqlClient.SqlCommand
Dim dtAdapter As Data.SqlClient.SqlDataReader
Dim dRet As String
Dim sCmdText As String
'
  'connection
  sqlCon.ConnectionString = "data source=myServer;initial catalog=myDatabase;Integrated Security=true"
  sqlCon.Open()
  '
  'query
  sCmdText = "SELECT UsersRowID FROM dbo.tvf_Get_Users(" & param & ")"
  '
  'command
  cmd = New System.Data.SqlClient.SqlCommand(sCmdText, sqlCon)
  cmd.CommandTimeout = 0
  '
  'main course
  If cmd.Connection.State = Data.ConnectionState.Closed Then cmd.Connection.Open()
  dtAdapter = cmd.ExecuteReader(Data.CommandBehavior.CloseConnection)
  If dtAdapter.HasRows Then
    While dtAdapter.Read()
      ' following assumes "dbUserId" is the userid field in the database 
      ' also use pipe "|" to split the userid's whens theres more than one
      ' this is so you can still use STRING as the function return and not an ARRAY
      dRet = dRet & dtAdapter.GetValue(dtAdapter.GetOrdinal("dbUserId")) & "|"
    End While
  End If
  If cmd.Connection.State <> Data.ConnectionState.Closed Then cmd.Connection.Close()
  Return dRet
  '
End Function

【讨论】:

    猜你喜欢
    • 2016-02-05
    • 2023-03-14
    • 2012-09-13
    • 2013-03-21
    • 2016-01-07
    • 2014-01-03
    • 2017-01-14
    • 1970-01-01
    • 2019-06-10
    相关资源
    最近更新 更多