У меня возникла проблема с датами моей программы на хранимую процедуру в SQL.Ошибка преобразования типа данных Nvarchar в datetime из VB.NET
Моя программа принимает дату из таблицы первенствовать и разбирает его как таковой:
tempDate = Date.FromOADate(exWS.Cells(exRow, myMatchedColumns(2)).value)
Dim format() = {"dd/MM/yyyy", "dd-MM-yyyy", "yyyy-MM-dd"}
dueDate = Date.ParseExact(tempDate, format,
System.Globalization.DateTimeFormatInfo.InvariantInfo,
Globalization.DateTimeStyles.None)
DueDate является «ДАТА» переменная поэтому я предполагаю, в этом пункте «DueDate» является универсальным объектом Дата. Я думаю, что это был лучший способ разобрать BOTH английскую региональную дату и Polish даты, так как это будет использоваться на польском компьютере.
Однако при передаче значения моей хранимой процедуры:
mySQLString = "EXEC bsp.PartPrice_sp " & _
"'" & dueDate & "', " & _
"'" & myPartID & "', " & _
"'" & currency & "'"
Английский посылает EXEC bsp.PartPrice_sp '01/09/2015', 'L555', 'USD'
, который возвращает цену.
Польские посылает EXEC bsp.PartPrice_sp '2015-09-01', 'L555', 'USD'
, который берет на себя ошибку:
The conversion of a nvarchar data type to a datetime data type resulted in an out-of-range value.
Я понимаю ошибку, но следующее выполнение хранимой процедуры, польская машина послала 2015-09-10
, возвращающую цену штраф. Я предполагаю, что с 2015-10-09
все еще находится в радиусе действия, но интересно вернула правильную цену на 10 сентября 2015 года.
Тем не менее, я изо всех сил стараюсь найти универсальный способ выполнения хранимой процедуры на английском и польском языках. Любая помощь, которую вы можете дать правильно разобрать даты, что также делает SQL счастливым, было бы потрясающе.
Спасибо.
Программа написана на VB .NET.
P.S Если изменить @duedate в хранимой процедуре из NVARCHAR к DateTime, я получаю:
Error converting data type varchar to datetime.
Ошибка, который я предполагаю, что это из формата английского. Большое спасибо.
Try 'DueDate = duedate.ToString ("d", System.Globalization.CultureInfo.CreateSpecificCulture ("EN-US"))' –
Спасибо за Ваш комментарий, он выглядит хорошо, за исключением функции ToString принимает целое число, не строка и не принимает второй параметр? Я получаю слишком много ошибок Аргументов. Благодарю. – MikeS
Я тебя не понял .. !!(Функция _ToString принимает целое число, а не строку и не принимает второй параметр? _ Уточняет это), и этот метод работает без каких-либо ошибок, см. [This] (https://dotnetfiddle.net/QMakBO) и попробуйте это 'duedate = Формат (duedate," dd/MM/yyyy ")' –