2010-06-28 1 views
1

У меня есть строка запроса из клиентского приложения. Он поставляется со всеми параметрами, какC# как обработать хранимую процедуру Строка

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

В сервере, я сделал функцию (Util.getParametersFromString) для разбора строки из клиентского приложения, чтобы параметр объекта массива с помощью функции 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"; 

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

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

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

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

ответ

1

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

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

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

1

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

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

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

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

  • Нет связанных вопросов^_^