Безопасный DateTime в инструкции T-SQL INSERT - PullRequest
4 голосов
/ 21 сентября 2011

В последнее время возникли проблемы с использованием DateTime в операторе INSERT INTO T-SQL. Хорошо работает на одной машине, но может не работать на другой, и я думаю, это связано с настройками локали.

Итак, если у меня есть переменная DateTime, какой безопасный способ использовать ее в строке SqlStatement, она всегда будет работать независимо от настроек локальной системы?

Спасибо

Ответы [ 3 ]

9 голосов
/ 21 сентября 2011

Использовать параметризованный INSERT запрос.

Скорее всего, ваш код собирает командную строку SQL. Это также делает ваш код уязвимым для SQL-инъекций .

0 голосов
/ 21 сентября 2011

Либо вы используете параметризованные команды / хранимые процедуры, где вы создаете параметр типа DateTime в хранимом и назначаете его из кода .net при вызове хранимого (поэтому .NET и SQL будут знать, что они работают с datetime, и будут никогда не путайте / не меняйте день и месяц), или вы добавляете определенную команду поверх ваших команд вставки, а затем форматируете все строки dataetime с этим шаблоном, например:

SET DATEFORMAT dmy;

SET DATEFORMAT (Transact-SQL)

0 голосов
/ 21 сентября 2011

Вы должны использовать параметризованный запрос, как предложил Адриан.

Другая возможность - использовать строковое представление ISO 8601, как описано здесь , которое не зависит от настроек локали.

Это будет выглядеть так:

20110921 15:20:00
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...