2009-12-19 24 views
7

Tôi có đối tượng dateTime trong C# và tôi muốn thực hiện chèn vào trường datetime SQL Server. Định dạng chính xác cho điều này là gì?cách chính xác để định dạng ngày giờ trong trường datetime của máy chủ SQL là gì

+4

Có thể bạn không nên xây dựng chuỗi SQL bằng mã. Thay vào đó, bạn nên xem xét sử dụng procs được lưu trữ, truy vấn được tham số hóa hoặc ORM. Bất kỳ điều nào trong số này sẽ giải quyết vấn đề của bạn với định dạng khi bạn chỉ truyền đối tượng, bạn không phải thực hiện bất kỳ định dạng chuỗi nào. –

Trả lời

16

Cách chính xác để thực hiện việc này là sử dụng truy vấn được tham số hóa, không phải định dạng văn bản. Sau đó, bạn chỉ có thể sử dụng thông số SqlDbType.DateTime được nhập mạnh mẽ.

(Nếu bắt buộc phải sử dụng định dạng văn bản để làm điều này - và tôi khuyên chống lại nó -. Sau đó giống như yyyyMMdd HH:mm:ss nên làm các trick)

+0

tôi sẽ không chuyển một chuỗi vào truy vấn được tham số hóa và có cùng vấn đề không? – leora

+0

Trên thực tế, định dạng được đảm bảo hoạt động trên bất kỳ Máy chủ SQL nào bất kể cài đặt ngôn ngữ và khu vực sẽ là 'yyyyMMdd HH: mm: ss' (không có dấu gạch ngang - những lỗi gây ra sự cố trong cài đặt ngôn ngữ nhất định) –

+0

@marc_s: Tôi đã đã cập nhật câu trả lời để sử dụng định dạng an toàn trong mọi trường hợp. – LukeH

0

sử dụng SET DATEFORMAT

một mẫu 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

Để mở rộng câu trả lời của @ Luke, tôi đã gặp lỗi này chỉ trong một ngày khác.

Định dạng yyyy-MM-dd HH:mm:ss có một ngôn ngữ/vấn đề ngôn ngữ trên SQL Server 2005 (một ví dụ là tiếng Pháp), nhưng là cố định trong SQL 2008:

Vì vậy, KHÔNG sử dụng định dạng này: yyyy-MM-dd HH:mm:ss (không gian tách).

Chỉ sử dụng: yyyy-MM-ddTHH:mm:ss ("T" separator) hoặc yyyyMMdd HH:mm:ss (không delimiters dash)

quan trọng nếu bạn đang tạo ra kịch bản bao gồm datetime hằng số.

Xem Jamie Thomson's article on SQL Blog

Các vấn đề liên quan