хранимая процедура createparameter вставляет пустую дату

#sql-server-2008 #stored-procedures #asp-classic

#sql-server-2008 #хранимые процедуры #asp-классический

Вопрос:

Я использую КЛАССИЧЕСКИЙ ASP с хранимой процедурой, в хранимой процедуре есть поле даты, которое не является обязательным.

Я пытаюсь вставить, когда в моей форме нет даты, введенной.

Я пробовал «», Null, NULL, vbNull.

редактировать: я устанавливаю значение DOB равным «» в вызове функции для этого:

 DOB = ""

if DOB = "" then
    DOB = ????
End if

Set paramId = cmdStoredProc.CreateParameter("@DOB", adDBDate, adParamInput,0,DOB)
cmdStoredProc.Parameters.Append paramId
  

Это с sql server 2008.

Приветствуется любая помощь.

Комментарии:

1. что происходит при запуске вашего кода?

2. Объект параметра определен неправильно. Была предоставлена противоречивая или неполная информация.

3. Я передавал неверные данные в другое поле, а не в поле даты, поле даты работало с передачей Null.

4. Возникает ли эта конкретная ошибка, когда вы присваиваете значение Null DOB?

5. Казалось, что если я изменил тип данных в SP на adDBTimeStamp, значение Null сработало, так что теперь все работает. Кажется, sql server не любит adDate или adDBDate.

Ответ №1:

Null обычно это правильное значение в этом сценарии.

Из-за отсутствия деталей в вопросе я угадаю.

В конечном счете, у вас есть поле таблицы DOB с ненулевым значением, которому присваивается это нулевое значение в основе SP. Это, в свою очередь, вызывает ошибку.

Комментарии:

1. Несмотря на то, что проблема заключалась в передаче неверной даты, я все равно отправил Null в хранимую процедуру.

Ответ №2:

Если DOB пусто, попробуйте добавить параметр, но без значения. Это повлияет на значение параметра sp по умолчанию.

 If DOB = "" Then
    Set paramId = cmdStoredProc.CreateParameter("@DOB", adDBDate, adParamInput)
Else
    Set paramId = cmdStoredProc.CreateParameter("@DOB", adDBDate, adParamInput, 0, DOB)
End If

cmdStoredProc.Parameters.Append paramId
  

Комментарии:

1. Я все еще получаю «Объект параметра определен неправильно. Была предоставлена противоречивая или неполная информация.»

2. Для параметра должно быть указано значение, его непредоставление вызовет эту ошибку, однако Null должно быть приемлемым значением.

3. Если параметр не является обязательным, он должен иметь значение по умолчанию. Как я уже сказал, передача параметра без значения влияет на значение по умолчанию, определенное в SP, и это не вызовет ошибку для необязательного параметра (насколько я знаю?). В таких случаях я знаю два способа. Этот ответ является первым. Второй способ заключается в использовании NamedParameters свойства ADODB.Command объекта, присвоении ему значения True и передаче параметров, кроме необязательных. Конечно, значение NULL приемлемо для всех, но для параметра @DBO может быть другое значение по умолчанию, отличное от NULL?

4. Я предполагаю, что существует указанное значение по умолчанию, т.Е. .. As @DBO Date = '2011/11/11' .. . Я понимаю, что «хранимая процедура имеет поле даты, которое не требуется».

Ответ №3:

Вы пробовали

 if DOB = "" then
    DOB = Empty
End if
  

Комментарии:

1. По-прежнему получаем «Объект параметра определен неправильно. Была предоставлена противоречивая или неполная информация.» Спасибо.

Ответ №4:

Убедитесь, что поле DOB обрезано, чтобы символ пробела не сбивал вас с толку.

 If trim(DOB) = "" then ....
  

Комментарии:

1. Я устанавливаю DOB в «» для тестирования, поэтому я знаю, что это «». Спасибо.

Ответ №5:

Это связано с тем, что SQL Server не поддерживает тип данных adDBDate. Чтобы исправить эту проблему, измените тип данных параметра @DOB на adDBTimeStamp.

 Set paramId = cmdStoredProc.CreateParameter("@DOB", adDBTimeStamp, adParamInput, ,DOB)
cmdStoredProc.Parameters.Append paramId
  

http://support.microsoft.com/kb/214459/en