【问题标题】:VBS Error, Can't execute a query using WMI Service?VBS 错误,无法使用 WMI 服务执行查询?
【发布时间】:2012-05-24 19:19:42
【问题描述】:

我收到Incorrect Syntax Near ')'

它引用的行最后是oCN.Execute(sSQL)

从语法上讲,如果我删除 For Each objItem in colItems 中的任何一行,它不会抛出错误。

是否不能使用 WMI 服务中的对象执行 SQL 查询?还是我在其他地方出错了?

我可以根据要求列出更多代码;我现在尽量保持简单。

Set oCN = CreateObject("ADODB.connection")
sCN =  "Provider=SQLOLEDB; Data Source=" & oRS("sql_server_instance") & ";Initial Catalog=master;Integrated Security=SSPI;"
oCN.Open sCN

'Gather disk information from WMI Service
Set oWMIService = GetObject("winmgmts:\\" & oRS("sql_server") & "\root\cimv2")
Set colItems = oWMIService.ExecQuery _
    ("Select * From Win32_Volume")

'Loop through all disks    
For Each objItem in colItems

sSQL="insert into HDS_DBA_DB.[dbo].[TEMP_disk_info_table] (drive_letter, capacity) " &_
"values('" & objItem.DriveLetter & "'," & objItem.Capacity & ")"

oCN.Execute(sSQL)

Next

【问题讨论】:

    标签: sql-server vbscript wmi


    【解决方案1】:

    看来问题出在objItem.Capacity属性上,在插入之前检查该属性的值,因为该值可以为空,并且会产生不正确的SQL语句,例如

    insert into HDS_DBA_DB.[dbo].[TEMP_disk_info_table] (drive_letter, capacity) values ('E:',)
    

    【讨论】:

    • 正确。语法错误一定是在 SQL 的末尾。对空白条目的条件检查解决了这个问题。非常感谢。
    • 没问题,很高兴为您提供帮助。
    【解决方案2】:

    我相信在 ADODB.Connection 对象上使用 .Execute 是为了检索结果。

    您是否尝试过使用 ADODB.Command 对象?

    Set cmd = CreateObject("ADODB.Command")
    cmd.ActiveConnection = oCN
    
    cmd.CommandType = 1
    cmd.CommandText = sSQL
    
    cmd.Execute();
    

    【讨论】:

    • 您可以使用 object.Execute 来执行语句。不过,谢谢你的建议。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-23
    • 2011-10-03
    • 2017-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多