Visual Basic:无法从记录集中读取记录/数据.

Jam*_*son 1 sql vba recordset asp-classic

这是我的代码:

Dim CompanyName, _
    CompanyDomain, _
    CompanyEmail, _
    CompanySupportPhone

Call GetEmailList

Sub GetEmailList
    dim sql
    dim companydata

    sql = ""
    sql = sql & " DECLARE @CompanyName VARCHAR(100);"
    sql = sql & " DECLARE @CompanyDomain VARCHAR(100);"
    sql = sql & " DECLARE @CompanyActivityEmail VARCHAR(100);"
    sql = sql & " DECLARE @CompanySupportPhone VARCHAR(100);"

    sql = sql & " SELECT"
        sql = sql & " @CompanyName = CASE WHEN Setting = 'CompanyName'"
        sql = sql & " THEN StringValue ELSE @CompanyName END,"
        sql = sql & " @CompanyDomain = CASE WHEN Setting = 'CompanyDomain'"
        sql = sql & " THEN StringValue ELSE @CompanyDomain END,"
        sql = sql & " @CompanyActivityEmail = CASE WHEN Setting = 'CompanyActivityEmail'"
        sql = sql & " THEN StringValue ELSE @CompanyActivityEmail END,"
        sql = sql & " @CompanySupportPhone = CASE WHEN Setting = 'CompanySupportPhone'"
        sql = sql & " THEN StringValue ELSE @CompanySupportPhone END"
    sql = sql & " FROM ClientSettings"
    sql = sql & " WHERE Setting in ('CompanyDomain','CompanyActivityEmail','CompanySupportPhone','CompanyName')"

    sql = sql & " SELECT ISNULL(@CompanyName, '') AS CompanyName, ISNULL(@CompanyDomain, '') AS CompanyDomain, ISNULL(@CompanyActivityEmail, '') AS CompanyEmail, ISNULL(@CompanySupportPhone, '') AS CompanySupportPhone"
    set companydata =  getRecordset(sql)

    CompanyName = companydata("CompanyName") ' LINE 80
    CompanyDomain = companydata("CompanyDomain")
    CompanyEmail = companydata("CompanyEmail")
        CompanySupportPhone = companydata("CompanySupportPhone")

        companydata.Close
        Set companydata = Nothing
End Sub
Run Code Online (Sandbox Code Playgroud)

这会引发错误:

80号线

无法在与请求的名称或序号对应的集合中找到项目.

我在上面标记了第80行.我在SQL Server管理器中运行这个完全相同的SQL,它返回结果:

CompanyName CompanyDomain   CompanyEmail    CompanySupportPhone
MyCompanyName   http://localhost    MyCompanyName@email.com 801-555-1212
Run Code Online (Sandbox Code Playgroud)

知道我在这里做错了什么吗?

GetRecordSet正确加载并处理数据库调用,此函数在其他1,000个地方有效.我确定问题不在那里.

ami*_*t_g 5

sql = sql & " SET NOCOUNT ON;"
Run Code Online (Sandbox Code Playgroud)

作为第一个SQL语句.

设置NOCOUNT ON使用情况

  • @amit_g:是的,这个链接指向了很多文字.因此,为了清楚起见,答案就是这样:有时ADODB会让自己感到困惑并且认为返回的单个"行数"是SQL服务器将被视为记录集.大多数情况下,我们不需要此值,因此"SET NOCOUNT ON"会阻止SQL Server发送此幻像记录集,并避免ADODB有时会混淆. (2认同)