“无效query"无明确理由的例外

本文关键字:理由 query 无效 quot | 更新日期: 2023-09-27 18:07:24

下一个WMi查询有什么问题?(我得到了"无效查询"管理异常)。

        const string deviceName = "04157DF42C9B1109";
        string wmiQuery = string.Format("SELECT * FROM Win32_USBControllerDevice WHERE Antecedent LIKE '%{0}%'", deviceName);
        ManagementObjectSearcher searcher = new ManagementObjectSearcher(wmiQuery);
        ManagementObjectCollection retObjectCollection = searcher.Get();
        foreach (ManagementObject retObject in retObjectCollection)
        {
            Console.WriteLine("[{0}]:{1}", retObject["Antecedent"], retObject["Dependent"]);
        }

“无效query"无明确理由的例外

我不知道如何修复原来的错误,但以下方法可以用作解决方案:

string wmiQuery = string.Format("SELECT * FROM Win32_USBControllerDevice");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(wmiQuery);
ManagementObjectCollection retObjectCollection = searcher.Get();
var retObjectList = retObjectCollection.Cast<ManagementObject>()
    .Where(m => ((string)m["Antecedent"]).Contains(deviceName))
    .ToList();
foreach (ManagementObject retObject in retObjectList)
{
    Console.WriteLine("[{0}]:{1}", retObject["Antecedent"], retObject["Dependent"]);
}

我注意到其他人也有同样的问题,有些人建议使用ASSOCIATORS OF语句(资源:https://superuser.com/questions/740564/wmi-query-based-on-antecedent-string)这是这里接受的答案,所以它可能也适用于您。

我建议你使用纯字符串而不是格式化它::

 string wmiQuery = "select * from Win32_USBControllerDevice where Antecedent like '%" + deviceName + "%'";

而不是:

 string wmiQuery = string.Format("SELECT * FROM Win32_USBControllerDevice WHERE Antecedent LIKE '%{0}%'", deviceName);

还有一件事:为什么需要在string对象上使用const ?也许这也是你的问题。