2010-09-01 2 views
3
public static void Command(string vCommand, string machineName, string username, string password) 
      { 
       ManagementScope Scope = null; 
       ConnectionOptions ConnOptions = null; 
       ObjectQuery ObjQuery = null; 
       ManagementObjectSearcher ObjSearcher = null; 
       try 
       { 
        ConnOptions = new ConnectionOptions(); 
        ConnOptions.Impersonation = ImpersonationLevel.Impersonate; 
        ConnOptions.EnablePrivileges = true; 
        //local machine 
        if (machineName.ToUpper() == Environment.MachineName.ToUpper()) 
         Scope = new ManagementScope(@"\ROOT\CIMV2", ConnOptions); 
        else 
        { 
         //remote machine 
         ConnOptions.Username = username; 
         ConnOptions.Password = password; 
         Scope = new ManagementScope(@"\\" + machineName + @"\ROOT\CIMV2", ConnOptions); 
        } 
        Scope.Connect(); 

        ObjQuery = new ObjectQuery("SELECT * FROM Win32_Directory WHERE Name = 'c:\\0stuff'"); 
        ObjSearcher = new ManagementObjectSearcher(Scope, ObjQuery); 

        foreach (ManagementObject obj in ObjSearcher.Get()) //ERROR HAPPEN HERE 
        { 
         //code here 
        } 

        if (ObjSearcher != null) 
        { 
         ObjSearcher.Dispose(); 
        } 
       } 
       catch (Exception ex) 
       { 
        throw ex; 
       } 
      } 
     } 

Если я использую только «ObjQuery = новый ObjectQuery (» SELECT * FROM Win32_Directory «);», я не получаю никаких проблем.я получаю ошибку о неверном запроса при добавлении WHERE Name =

Но как только я пытаюсь использовать «WHERE Name = X», я получаю ошибку «неправильный запрос».

Я не знаю, что не так. (и до того, как кто-то спросит, да c: \ 0stuff существуют).

ответ

3

Вы должны использовать дословный строковый литерал @"..." для предотвращения обратной косой черты рассматривается как последовательность эвакуации в C#:

@"SELECT * FROM Win32_Directory WHERE Name = 'c:\\0stuff'" 

Без @ запроса, который на самом деле послан будет выглядеть следующим образом:

 
SELECT * FROM Win32_Directory WHERE Name = 'c:\0stuff' 

Обратите внимание, что обратная косая черта больше не экранирована надлежащим образом.

+0

Это работает! Большое спасибо. Как, черт возьми, я должен был знать, что мне нужно удвоить обратную косую черту как для C# AND SQL> _ < Это то, что я не забуду (надеюсь) – Wildhorn

Смежные вопросы