Я получаю ошибку неверного запроса при добавлении WHERE Name = - PullRequest
3 голосов
/ 01 сентября 2010
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 = new ObjectQuery (« SELECT * FROM Win32_Directory »);», у меня вообще нет проблем.

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

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

1 Ответ

3 голосов
/ 01 сентября 2010

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...