2011-12-29 38 views
5

Tôi đang làm việc trên một ứng dụng lưu trữ dữ liệu trong bảng tính vào cơ sở dữ liệu Postgresql. Tôi quen thuộc với C# và. Net nhưng không tốt lắm với Postgresql. Tôi gặp sự cố khi lưu trữ giá trị DateTime vào cột TimeStamp; Tôi tiếp tục nhận được thông báo lỗi: Không thể chuyển đổi giá trị tham số từ DateTime thành Byte []. Lời khuyên nào sẽ được đánh giá cao.Lưu trữ C# datetime để postgresql TimeStamp

string query = "INSERT INTO organizer(organizer_name, contact_name, phone, alt_phone, created_date, last_update) " + 
       "VALUES('@name', '@contactname', '@phone', '@altphone', '@created', '@updated')"; 

      OdbcCommand cmd = new OdbcCommand(query, con); 
      cmd.Parameters.Add("@name", OdbcType.VarChar); 
      cmd.Parameters["@name"].Value = org.Name; 

      cmd.Parameters.Add("@contactname", OdbcType.VarChar); 
      cmd.Parameters["@contactname"].Value = org.ContactName; 

      cmd.Parameters.Add("@phone", OdbcType.VarChar); 
      cmd.Parameters["@phone"].Value = org.Phone; 

      cmd.Parameters.Add("@altphone", OdbcType.VarChar); 
      cmd.Parameters["@altphone"].Value = org.AltPhone; 

      cmd.Parameters.Add("@created", OdbcType.Timestamp).Value = DateTime.Now; 

      cmd.Parameters.Add("@updated", OdbcType.Timestamp).Value = DateTime.Now; 

      con.Open(); 
      cmd.ExecuteNonQuery(); 

Trả lời

1

Bạn có một vài giải pháp ở đây ... Tôi sẽ giả định bảng tổ chức có trường dữ liệu created_date và last_update là dấu thời gian, đúng không? Câu trả lời silliest là thay đổi những người để các lĩnh vực varchar. heh.

2 câu trả lời tốt hơn ... Tôi giả định này là một lỗi định dạng nơi DateTime.Now không trả lại trong pgsql định dạng muốn:

Vì bạn đang chỉ cho nó dấu thời gian hiện tại

  • bạn có thể xác định bảng của mình để mặc định các cột này đến bây giờ() và sau đó không chuyển giá trị cho cột này, khi chèn bảng sẽ chỉ điền với giá trị mặc định của now().

  • thay vì xác định biến thành DateTime.Now và sau đó chuyển biến, chỉ cần gửi postgres now() và nó sẽ điền nó theo định dạng mà nó cảm thấy đúng.

Và tiềm năng thứ hai là định dạng ngày PG mong đợi như là một phần của tuyên bố chèn ... Tôi cần biết giá trị của DateTime.Now cho định dạng pg muốn xem. Điều này có thể là một chút thao tác chuỗi ...

2

Tôi không có một PostgreSQL db tiện dụng để thử nghiệm với, nhưng tôi tin rằng bạn đang nhìn thấy điều này bởi vì các OdbcType.Timestamp thực sự là một mảng byte, không phải là một thời gian và ngày. Từ MSDN:

Timestamp: A stream of binary data (SQL_BINARY). This maps to an Array of type Byte.

Đây có lẽ là bởi vì timestamp datatype, trong SQL Server, là

a data type that exposes automatically generated, unique binary numbers within a database. timestamp is generally used as a mechanism for version-stamping table rows.

tôi sẽ cố gắng sử dụng OdbcType.DateTime, mà dường như để ánh xạ các khái niệm đằng sau PostgreSQL'stimestamp.

EDIT:

Here là một bài hữu ích mà tóm tắt các ánh xạ giữa PostgreSQL và .NET.

+0

Điều đó giải quyết được lỗi đó, nhưng tạo ra một lỗi khác - L ERI: cú pháp nhập không hợp lệ cho dấu thời gian loại: "@created"; Lỗi khi thực hiện truy vấn. – JediusX

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