1

我的 C# .NET 2.0 应用程序使用ManagementObjectSearcher该类执行两个查询:

_searcher = new ManagementObjectSearcher("root\\WMI", "SELECT * FROM MSWmi_PnPInstanceNames");

_searcher = new ManagementObjectSearcher("root\\WMI", "SELECT * FROM MSSerial_PortName");

我想将它们组合起来,以便_searcher包含两个查询的所有结果。但是,当我尝试这样做时......

_searcher = new ManagementObjectSearcher("root\\WMI", "SELECT * FROM MSWmi_PnPInstanceNames AND MSSerial_PortName");

...引发“无效查询”异常。有人对我如何使这项工作有任何想法吗?谢谢。

4

2 回答 2

3

不幸的是,WMI 查询语言不支持joinorunion操作,因此您必须单独运行这些查询(因为从不同的对象存储中选择)。

WMI 查询语言 (WQL) 是 ANSI SQL 的子集 — 有一些语义变化。并非您在 SQL 中可以做的所有事情都可以在 WQL 中实现。您可以在 MSDN 上在线查看 WMI支持的查询构造。

于 2010-10-04T20:21:48.037 回答
0

我可以使用多个表运行查询,如下所示

 ManagementObjectSearcher searcher; 
 query = new ObjectQuery(string.Format("Select SMS_CollectToSubCollect.subCollectionID,SMS_Collection.Name " +
                                        " from SMS_CollectToSubCollect, SMS_Collection " +
                                        " where  subCollectionID in " +
                                        " (select CollectionID  from SMS_Collection where name='{0}') " +
                                        " and SMS_Collection.CollectionID  =  SMS_CollectToSubCollect.parentCollectionID " , name));
foreach (ManagementObject queryObj in searcher.Get())
{
//TODO:read values from results 
 }

希望这可以帮助

于 2012-12-17T04:00:49.933 回答