#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