查询 SQL 表并将结果存储在数组中

Posted

技术标签:

【中文标题】查询 SQL 表并将结果存储在数组中【英文标题】:Query SQL Table And Store Results In Array 【发布时间】:2016-11-03 12:31:44 【问题描述】:

我想查询一个 SQL Server 表并将该查询的结果存储在一个数组中。我只从一个字段返回Distinct(),所以它应该非常简单。我的语法产生错误

限定符无效

Set r = conn.Execute这行代码上,它突出显示了conn这个词我应该如何重写这个语法以仍然使用ADO但能够成功运行这个过程?

Public Function ReturnData()
Dim c As ADODB.Connection
Dim r As ADODB.Recordset
Dim f As ADODB.Field
Dim conn As String
Dim arrResults() As Variant
Set c = New ADODB.Connection
With c
.Provider = "sqloledb.1"
With .Properties
    .Item("Data Source") = "ServerName"
    .Item("Initial Catalog") = "Database"
    .Item("PassWord") = "password"
    .Item("User ID") = "user"
End With
.Open
Set r = conn.Execute("SELECT Distinct(Name) from registered where cancelled IS NULL;")
i = 0
r.MoveFirst
Do Until rst.EOF
    arrResults(i) = rst.Fields(0)
    i = i + 1
Loop
rst.Close
Set rst = Nothing
c.Close
End Function

【问题讨论】:

你有 conn 是一个字符串,c 是一个连接 - 你能做 c.execute 这段代码有一些问题。你是从网上复制/粘贴的吗?有好几次调用变量rst。但这没有定义。怀疑你应该替换为r。有两个 with 语句。但只有 1 个“结束于”。变量 i 未声明。 Dim i AS Integer 修复。 【参考方案1】:

另一种将记录集放入数组的方法是使用SplitRecordset.GetString。无论如何,它避免了循环。这是一个例子。

Public Sub RsToArray()

    Dim adoCon As ADODB.Connection
    Dim adoRs As ADODB.Recordset
    Dim vaLocations As Variant

    Set adoCon = New ADODB.Connection
    adoCon.Open sConn
    Set adoRs = adoCon.Execute("SELECT DISTINCT LocationName FROM Locations")

    vaLocations = Split(adoRs.GetString, vbCr)

    Debug.Print Join(vaLocations, "|")

    adoRs.Close
    adoCon.Close

    Set adoRs = Nothing
    Set adoCon = Nothing

End Sub

【讨论】:

【参考方案2】:

你有 conn 是一个字符串,c 是一个连接 - 你能做 c.execute

试试

Set r = c.Execute(...

我不确定您是否需要命令对象,如果需要,请参阅

https://msdn.microsoft.com/en-us/library/ms675065%28v=vs.85%29.aspx

查看如何为您的连接创建命令并执行它

无论如何,目前你正试图在一个字符串上“执行” - 字符串是一种原始类型,不会在数据库上执行 - 我认为你只是将 c 和 conn 混合在一起 - 让我们知道它是怎么回事

【讨论】:

以上是关于查询 SQL 表并将结果存储在数组中的主要内容,如果未能解决你的问题,请参考以下文章

SQL将数据插入临时表并将结果另存为视图

在存储过程中重用大型 SQL 查询

SQL语句怎样返回查询结果

在 azure synapse 存储过程中将表名作为参数传递时将查询结果分配给变量

带有月份名称的 SQL 存储结果表

如何使用循环绑定mysqli参数并将结果存储在数组中?