C # как разобрать хранимую процедуру String - PullRequest
1 голос
/ 28 июня 2010

У меня есть строка запроса из клиентского приложения. Он поставляется со всеми параметрами, такими как

string query="PROCS.DBO.APP_2370_ANALYST_S 'ABC' , 'TESTDATA' , 100";  

В Server я создал функцию (Util.getParametersFromString) для анализа строки из клиентского приложения, чтобы сделать объект параметра Array с помощью функции string.Split. Я использовал ',' и '' как разделитель для создания массива объектов.

И я выполняю процедуру БД, используя приведенный ниже код

 object[] parameters = Util.getParametersFromString(query); 
 DbCommand cmd = dbconnection.GetStoredProcCommand("PROCS.DBO.APP_2370_ANALYST_S",     parameters);

Хорошо работает, если строка параметров не содержит запятую или кавычку. Если одна из строк параметров имеет одну или несколько запятых или одну кавычку. Как ниже

string query="PROCS.DBO.APP_2370_ANALYST_S 'A,B,C' , 'Hi, Sam 'The Legend' Brown  was here ' , 100";  

массив параметров не пришел правильно. Я не знал, как правильно разобрать строку в этом

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

Я плохо разбираюсь в английском. Поэтому мне очень жаль, если я не правильно написал свой вопрос

С уважением, Парк

Ответы [ 2 ]

1 голос
/ 28 июня 2010

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

Например, запрос "PROCS.DBO.APP_2370_ANALYST_S 'ABC' , 'ABC' , 'ABC' , 100" можно интерпретировать как имеющий первый параметр "'ABC' , 'ABC'" и второй параметр "ABC" или наоборот.

Если, с другой стороны, ваш первый параметр может не содержать ' с, то вы можете определить первый параметр, посмотрев между первыми двумя ' с, а второй параметр - между третьим и последний '.

1 голос
/ 28 июня 2010

Вы можете избежать одиночных кавычек - ' становится '':

string query="PROCS.DBO.APP_2370_ANALYST_S 'A,B,C' , 'Hi, Sam ''The Legend'' Brown  was here ' , 100"; 

Что касается проблемы с запятой - это зависит от того, как написана ваша функция.Вам придется экранировать запятую и убедиться, что ваша функция знает об этой escape-последовательности.

...