计入wql查询的execquery

时间:2013-08-20 04:36:50

标签: vb.net wmi wql

我正在尝试连接到lenel并使用WQL来获取结果。在WMI资源管理器中运行时,WQL返回记录。

Set objServices = GetObject("winmgmts://./root/onguard")
Set cardSet = objServices.ExecQuery("select * from Lnl_Badge where id =11111")
if not cardSet is nothing then
Response.Write("<br/>cardset has something")
vContinue = true
else
Response.Write("<br/>cardSet set is nothing")
Exit Function
end if

Response.Write("<br/>count ")
Count = cardSet.Count
Response.Write(Count)

问题是Count的值无效,程序退出当前函数。知道什么是错的。

显示“Cardset有东西”。

编辑:

为了检查语法,我为cim2v做了以下

Set objWMIService = GetObject("winmgmts:")
Set colItems = objWMIService.ExecQuery("Select * From Win32_Process")
Response.Write(colItems.Count)
for each colItem in colItems

If Not colItem Is Nothing Then
    Response.Write("<br/>")
Response.Write(colItem.ProcessID)
end if
next

令我惊讶的是它的工作....那么为什么上面的代码不是在按摩...... :(

编辑: 日志文件中的错误

(Tue Aug 20 11:50:22 2013.179589208) : WDM call returned error: 4200
(Tue Aug 20 11:50:22 2013.179589208) : WDM specific return code: 4200
(Tue Aug 20 11:50:22 2013.179589208) : 

1 个答案:

答案 0 :(得分:0)

根据我对WMI API参考的理解,如果您没有遇到错误,SWbemServices.ExecQuery方法将始终返回SWbemObjectSet对象,无论该对象中是否有任何结果。

如果你的查询返回0结果,你仍然会在cardSet中有一个有效对象,所以If Not cardSet Is Nothing语句将始终触发,除非出现错误,但同时计数仍然是返回0。