2009-12-19 2 views
7

У меня есть объект dateTime в C#, и я хочу сделать вставку в поле datetime SQL Server. Каков правильный формат для этого?Каков правильный способ форматирования datetime в поле datetime SQL-сервера

+4

Вы, вероятно, не должны быть построения строк SQL в коде. Вместо этого вы должны посмотреть на использование хранимых процедур, параметризованных запросов или ORM. Любой из них разрешит вашу проблему с форматированием, поскольку вы просто передаете объект, вам не нужно выполнять форматирование строк. –

ответ

16

Правильный способ сделать это с помощью параметризованного запроса, не форматирование текста. Затем вы можете просто использовать строго типизированный параметр SqlDbType.DateTime.

(Если вы абсолютно необходимо использовать форматирование текста, чтобы сделать это - и я настоятельно рекомендую против него. - тогда что-то вроде yyyyMMdd HH:mm:ss должен сделать трюк)

+0

не будет ли я передавать строку в параметризованный запрос и иметь такую ​​же проблему? – leora

+0

На самом деле формат, который гарантированно работает на любом SQL Server, независимо от языковых и региональных настроек, будет 'yyyyMMdd HH: mm: ss' (без тире - это вызвало проблемы с определенными языковыми настройками) –

+0

@marc_s: обновил ответ, чтобы использовать формат «безопасный в любом случае». – LukeH

0

использование SET DATEFORMAT

образец took from here

 SET NOCOUNT ON 
    CREATE TABLE X(EXAMPLE INT, D SMALLDATETIME) 
    -- EXAMPLE 1 
    SET DATEFORMAT MDY 
    INSERT INTO X VALUES (1, '10/30/56') 
    -- EXAMPLE 2 
    SET DATEFORMAT YDM 
    INSERT INTO X VALUES (2, '56/31/10') 
    -- EXAMPLE 3 
    SET DATEFORMAT YMD 
    INSERT INTO X VALUES (3, '56/10/31') 
    SELECT * FROM X 
3

Чтобы расширить ответ на @ Luke, я наткнулся на эту ошибку только на днях.

Формат yyyy-MM-dd HH:mm:ss имеет локализованный вопрос/языка на SQL Server 2005 (пример французский), но фиксируется в SQL 2008:

Таким образом, не используйте этот формат: yyyy-MM-dd HH:mm:ss (пространство сепаратора).

использовать только: yyyy-MM-ddTHH:mm:ss ("T" разделитель) или yyyyMMdd HH:mm:ss (без тира разделителей)

Важен, если вы генерируете скрипты, которые включают в себя datetime константы.

Jamie Thomson's article on SQL Blog См

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