2013-05-13 3 views
0

Я понимаю, что это довольно распространенная проблема, связанная с форумами, но я в недоумении относительно того, что я сделал неправильно здесь.Ошибка преобразования типа данных varchar в datetime с использованием GETDATE()

У меня есть 'Текущий' таблицы что-то вроде:

ID(uniqueidentifier) 
Name(nvarchar max) 
FileName(nvarchar max) 
FileVersion(smallint) 
CurrentVersionDate(datetime) 

CurrentVersionDate вводится с помощью функции GETDATE() внутри SQLServer.

Когда пользователь нажимает «Создать файл» на моем веб-сайте, детали этой таблицы переносятся в таблицу «История». Поэтому я использую хранимую процедуру для выбора * details из «Current» и сохранения каждого значения в качестве переменной (я использую vb.net в проекте визуальной студии). Я покажу переменную даты, так как это проблема. Я сохраняю это как «дату» переменная:

Dim dDate as Date 
dDate = dr("CurrentVersionDate") 

Затем я посылаю эти переменные с хранимой процедурой, чтобы войти в «Истории» таблицу:

Execute sp_InsertHistory '" & ID & "','" & strName& "','" & strFile & "','" & intVersion & "','" & dDate & "'" 

объявляет переменные даты в хранимая процедура, как:

@Date datetime, 

с утверждением вставки:

INSERT INTO History 
(ID, Name, FileName, FileVersion, VersionDate) 
VALUES 
(@ID, @Name, @FileName, @FileVersion, @Date) 

Таблица «История» имеет ту же настройку, что и таблица «Текущий». Пройдя через код, эта ошибка ломается:

Error converting data type varchar to datetime 

Несомненно, переменные не являются varchar? И даже если это так, строка, безусловно, находится в правильном формате для SQLserver, потому что я просто выбираю значение даты, данное SQL! Любые мысли?

+0

Не конкатенации переменных в строку, установить их в качестве значений параметров команды. См. Http://stackoverflow.com/questions/13014044/sending-parameters-to-stored-procedures-vb-net – flup

ответ

0

Поскольку вы помещаете дату между кавычками, является varchar '" & dDate & "'", но я думаю, что проблема, с которой вы связаны, заключается в том, что вы получаете дату в локальном формате, и вам нужно вставить дату в SQL Сервер в его собственном формате.

Попробуйте вставить дату в виде строки в следующем формате: dDate.ToString("MM/dd/yyyy HH:mm:ss")

+0

yep well Я чувствую себя глупо сейчас! dDate был получен как дата-время в формате # 5/13/2013 10:06:17 AM # - очевидно, SQL не нравится бит «AM». спасибо за проверку работоспособности, ваше предложение сработало! – rxs179

0

строка, безусловно, в правильном формате SQLServer

Как вы знаете, что? Чтобы быть в безопасности, я бы использовал строку в недвусмысленном формате: YYYY-MM-DDTHH:MM:SS, например. 2013-05-13T01:01:00.

+0

Первоначально я думал, что поскольку дата была первоначально введена в SQL с использованием команды SQL getdate(). Но, очевидно, когда я получаю эту дату в vb.net, она извлекается в несколько другом формате - как заметил @SysDragon. Должно было осознать это на самом деле, но когда я долго смотрел на экран, все здравый смысл исчезает ... – rxs179

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