WMI007-WMI学习笔记(七)——Queries(查询(.NET))

原文地址链接:http://msdn.microsoft.com/en-us/library/aa720447(v=vs.71).aspx

Queries

.NET Framework 1.1

With WMI, the consumer can precisely define the data stream using queries. Queries limit the amount of data being returned both by specifying only those properties of interest (in the SELECT statement) and by retrieving only the entities of interest (using the WHERE clause). For example, if a user wanted to query on all drives on a computer (drive C, D, and so on) that fell below 2 MB:

使用WMI,用户可以通过查询来准确地定义数据流。查询可以限制返回的数据内容和个数,它是通过指定仅有哪些属性需要返回(在SELECT语句中)和仅有哪些感兴趣的实体被检索(使用WHERE子句)。

译注:

网上可以看到很多随意写上的代码,格式大多是SELECT * FROM XXX。这样的代码的效率是很低的,例如如果你需要得到硬盘的序列号,这样的查询结果将是所有的驱动器(包括软盘、光盘、可移动磁盘等)的序列号、名称、描述、容量大小、剩余空间等等信息,然后通过foreach来获取,获取时通过索引器来指定要获取的属性。

这样做的一个很明显的缺点是获取了很多不需要的信息,效率自然是较低的,尤其对于远程主机,还需要大量的数据传输。

其次是,通过foreach来迭代获取的所有对象,在通过索引器来索引属性并进行进一步的操作时,可能会抛出异常。例如获取所有的硬盘驱动器的容量时,如果光驱并没有插入光盘,那么在获取光驱容量大小的时候,值便是null,如果要输出直接调用ToString()方法,则会抛出异常,你需要捕获异常,或者是增加null判断。

正确的做法是,尽可能低在Sql语句中指定要获取的内容,例如指定驱动器的类型为硬盘驱动器(使用WHERE子句来限制),然后指定要获取的属性为容量(SELECT中指定)。

例如,一个用户想要查询计算机上的空闲容量小于2MB的驱动器。

SELECT * FROM Win32_LogicalDisk WHERE FreeSpace < 2000000

While the use of queries is not exactly new, queries represent a radical departure from the normal management API in which the only interface available supported the enumeration of elements of a particular type, with little or no opportunity to filter them.

查询语句并非是完完全全地新的,它需要符合WMI API。

仅仅是支持的可用接口,对于一个特定类型的支持的枚举元素,查询的接口只能小于或者是没有任何过滤条件。

(译注:例如对于驱动器空闲空间的查询,首先得保证WMI中包含驱动器实例的定义,然后是驱动器实例有空闲容量属性的定义,查询语句中才能够进行驱动器空闲空间的描述,不能查询一个没有的WMI类,也不能查询某一个类中没有的属性,例如查询内存的文件系统类型,自然是错误的。)

See Also

Using WMI with the .NET Framework | Schemas | Using Management Events | Instrumenting .NET Framework Applications with System.Management


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值