Я пытаюсь запустить запрос, который выбирает все из таблицы, содержащей DateTime. В DateTime, он использует переменную DateTime (аргумент, переданный через параметр), однако это дает мне это исключение:Выбор SQL DateTime с переменной C# DateTime
"FormatException был необработанное Необработанное исключение типа„System.FormatException“произошло в mscorlib.dll Дополнительная информация: строка не была признана в качестве действительного DateTime»
Solutions Я пытался, но не получилось:
- Преобразование DateTime в строку
- Преобразование DateTime в строку с правильным форматом, а затем обратно в DateTime снова
- Используйте метод DateTime.Parse
- Используйте метод DateTime.ParseExact с правильным форматом и использованием как «CultureInfo.InvariantCulture» и " CreateSpecificCulture («ан-ГБ»)
- Измените формат точно такой же отображается при выполнении запроса в базе данных
Как уже говорилось, ни одно из вышеперечисленного не работали ..
- Формат Я пытаюсь использовать: "MM/DD/YYYY 00:00:00"
- Формат показан при выполнении запроса в базе данных: "MM/DD/YYYY чч: мм: сс: FFF" (время должно быть установлено в 00:00:00)
Вот код, с помощью соединительного материала исключены:
cmd = new SqlCommand("SELECT * FROM Arithmetics "
+ "INNER JOIN ArithmeticsAndTypeIDs "
+ "ON Arithmetics.ArithmeticID = ArithmeticsAndTypeIDs.ArithmeticsID "
+ "INNER JOIN ArithmeticTypes "
+ "ON ArithmeticsAndTypeIDs.TypeID = ArithmeticTypes.TypeID "
+ "WHERE UserID = @value1 "
+ "AND TimeStamp >= '@value2' "
+ "AND TimeStamp <= '@value3'", con);
cmd.Parameters.AddWithValue("@value1", GetUserID(userLoggedIn));
cmd.Parameters.AddWithValue("@value2", DateTime.ParseExact(time.ToString(), formatString, CultureInfo.CreateSpecificCulture("en-GB").DateTimeFormat));
time = time.AddDays(1);
cmd.Parameters.AddWithValue("@value3", DateTime.ParseExact(time.ToString(), formatString, CultureInfo.CreateSpecificCulture("en-GB").DateTimeFormat));
проблема первая происходит в строке: «+» AND TimeStamp> = '@ value2' ""
* И если это имеет значение, вот цитата, которую я использую в базе данных, где obv. работы (с переменными заменяются значениями заполнителей)
SELECT * FROM Arithmetics
INNER JOIN ArithmeticsAndTypeIDs
ON Arithmetics.ArithmeticID = ArithmeticsAndTypeIDs.ArithmeticsID
INNER JOIN ArithmeticTypes
ON ArithmeticsAndTypeIDs.TypeID = ArithmeticTypes.TypeID
WHERE UserID = 0
AND
ArithmeticTypes.TypeID = 2
AND TimeStamp >= '09-21-2016 00:00:00'
AND TimeStamp <= '09-22-2016 00:00:00'
Следует отметить, что «@ значение2» содержит значение («09-21-2016 00:00:00») (при условии, что это дата который передается как параметр), поэтому я знаю, что форматирование верное.
Любая помощь в направлении исправления этой проблемы было бы весьма признателен :)
Удалить единственную цитату 'in' @ value2 '=> '" AND TimeStamp> = @ value2 "'. И в @ value3 также – Pikoh
Добавление одинарных кавычек вокруг заполнитель-указатель параметра преобразует его в литеральной строке и, конечно, нет способа рассмотреть строку «@ value1», поскольку это была дата – Steve
О, так что попробуйте преобразовать «@ value2 "в datetime? Это кажется таким логичным сейчас ... Спасибо! Как я могу обойти это без открытия инъекций SQL? – Sprouze