2014-02-26 34 views
0

我有這方面的工作查詢對字符串變量WMI轉義字符編程

ManagementObject pnpdevice = new ManagementObjectSearcher(String.Format(
"select * from Win32_PnPEntity where DeviceID='{0}'", 
"USB\\\\VID_046D&PID_C52B&MI_00\\\\6&48E0D58&0&0000")).First(); 

這裏我才意識到,我需要使用四斜線一個斜線:兩人在C#中逃脫,兩個WMI逃跑。

我的問題是如何以編程方式而不是手動執行此操作。通常我當然會使用字符串逃脫前面的@,所以這個作品,以及:

ManagementObject pnpdevice = new ManagementObjectSearcher(String.Format(
"select * from Win32_PnPEntity where DeviceID='{0}'", 
@"USB\\VID_046D&PID_C52B&MI_00\\6&48E0D58&0&0000")).First(); 

,但我怎麼做,與一個字符串變量?

ManagementObject pnpdevice = new ManagementObjectSearcher(String.Format(
"select * from Win32_PnPEntity where DeviceID='{0}'", 
device["DeviceID"].ToString())).First(); 

這沒有我需要的任何轉義,並且作爲無效查詢失敗。寫它@device["DeviceID"].ToString()不起作用。

有什麼想法?

回答

0

我很笨,這很容易,只需要添加一個替換字符串。

ManagementObject pnpdevice = new ManagementObjectSearcher(String.Format(
    "select * from Win32_PnPEntity where DeviceID='{0}'", 
    @device["DeviceID"].ToString().Replace("\\", "\\\\"))).First(); 
+0

只是FYI,這是行不通的。 'ManagementObjectSearcher'不是一個集合,也不會繼承'IEnumberable',所以你不能調用First()。 –