2011-06-15 31 views
1

我正在玩弄WMI。我試圖修改下面的代碼來修復一個錯誤,即它最初由模型查詢。如果您有兩個具有相同型號的驅動器,則它只會返回第一個磁盤的\\。\ PHYSICALDEVICE。相反,我現在向用戶展示\\ PHYSICALDEVICE:MODEL字符串。他們從下拉列表中選擇此項,我解析出物理設備並將其用於查詢。Win32_DiskDrive上無效的WQL查詢

除了我不斷收到一個錯誤「無效查詢」的MOS查詢

"SELECT * FROM Win32_DiskDrive WHERE DeviceID = '" + device + "'" 

查詢看起來不錯,我的眼睛返回,但顯然不是。幫助讚賞。

全碼:

private void Form1_Load(object sender, EventArgs e) 
    { 
     //Select item from drop down menu 
     ManagementObjectSearcher mosDisks = new ManagementObjectSearcher(
"SELECT * FROM Win32_DiskDrive"); 

     foreach (ManagementObject moDisk in mosDisks.Get()) 
     { 
      string devid = moDisk["Model"].ToString(); 
      string drvnum = moDisk["DeviceID"].ToString(); 

      cmbHdd.Items.Add(drvnum + ": " + devid); 
     } 
    } 

    private void cmbHdd_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     //update form with selected device 
     int i = cmbHdd.SelectedItem.ToString().IndexOf(':'); 
     string device = cmbHdd.SelectedItem.ToString();//.Substring(0,i); 
     ManagementObjectSearcher mosDisks = new ManagementObjectSearcher(
"SELECT * FROM Win32_DiskDrive WHERE DeviceID = '" + device + "'"); 
     foreach (ManagementObject moDisk in mosDisks.Get()) 
     { 
      lblDeviceID.Text = "DeviceID: " + moDisk["DeviceID"].ToString(); 
     } 
    } 

回答

3

WMI要求反斜槓(\)在查詢中增加了一倍。

device替換爲\\\變量,然後將其插入查詢並查看是否有幫助。

+0

謝謝。你讓我走在正確的道路上(我認爲)。設備變量已經被定義爲'\\\\。\\ PHYSICALDEVICE0'。我是否需要添加更多文字反斜槓? – 2011-06-15 14:47:58

+1

是的 - var需要傳遞給查詢爲'\\\\\\\\。\\\\ PHYSICALDEVICE0'。瘋狂。謝謝。 – 2011-06-15 14:56:26

+1

@DavidM:瘋狂+1。這是相當古老的,但仍然。你可以部分返回到以@:@「\\\\。\\ PHYSICALDEVICE0」作爲前綴的前綴。 – raven 2013-03-19 12:28:37