ASP (не .NET): отправка нулевого значения в качестве параметра для хранимой процедуры в строке запроса? - PullRequest
0 голосов
/ 05 марта 2009

У меня есть следующий код на странице ASP:

<%
    QueryToJSON(conn, "execute WebGetEmployeesPlanned'"
    +Request.QueryString("customercode")+"', 
    '"+Request.QueryString("lang")+"', 
    '"+Request.QueryString("date")+"'").flush
%>

На этой странице нет другого кода, кроме некоторых включений, так как я называю эту страницу ajax с другой страницы, используя $ .getJSON ()

Проблема в том, что я не знаю, как я могу отправить NULL как один из параметров SP.

Иногда Request.QueryString ("customercode") будет пустым. Мне нужно знать, как я могу поместить это в код выше, чтобы SP видел этот параметр как NULL.

У меня есть доступ к коду SP, чтобы я мог что-то изменить на этой стороне, чтобы преобразовать пустую строку в ноль.

Заранее спасибо.

1 Ответ

1 голос
/ 05 марта 2009

Вы на правильном пути. Параметры строки запроса - это просто строки. Таким образом, вы должны выбрать строковый представитель для NULL, который не будет конфликтовать ни с одним из фактических значений строки, которые вы будете отправлять. Вы можете использовать пустую строку, «ноль» или «специальный нулевой флаг Томаса»; это не важно В параметре строки запроса отсутствует «официальное» представление NULL.

Обновление : нет, я не думаю, что хранимая процедура - это место для обработки этого перевода. Причина в том, что тот факт, что вы преобразуете свое строковое представление нуля в параметре строки запроса в «реальный» ноль, - это то, что вам нужно сделать из-за ограничений того, что вы можете поместить в параметр строки запроса. Выполнение этого преобразования в хранимой процедуре сделало бы процедуру, в некоторой степени, «осведомленной» о строке запроса, и это не кажется правильным. Вместо этого я сделал бы это в разметке aspx, которая, как ожидают, будет осведомлена о сети. Вот исходный пример (непроверенный, так что исправьте мои синтаксические ошибки или, лучше, измените на string.Format () или параметризованный запрос ...

Изменение:

QueryToJSON(conn, "execute WebGetEmployeesPlanned'"
+Request.QueryString("customercode")+"', 
'"+Request.QueryString("lang")+"', 
'"+Request.QueryString("date")+"'").flush

до:

QueryToJSON(conn, "execute WebGetEmployeesPlanned "
    + (string.IsNullOrEmpty(Request.QueryString("customercode")) ?
          "null, '"
          :
          "'" + Request.QueryString("customercode") + "','")
    +Request.QueryString("customercode")+"', 
    '"+Request.QueryString("lang")+"', 
    '"+Request.QueryString("date")+"'").flush
...