Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Sử dụng DateTime trong SqlParameter cho thủ tục được lưu trữ, lỗi định dạng

Bạn đang thiết lập SqlParameter như thế nào ? Bạn nên đặt SqlDbType thuộc tính SqlDbType.DateTime và sau đó chuyển DateTime trực tiếp đến tham số (KHÔNG chuyển đổi thành chuỗi, khi đó bạn đang yêu cầu một loạt vấn đề).

Bạn sẽ có thể nhận giá trị vào DB. Nếu không, đây là một ví dụ rất đơn giản về cách thực hiện:

static void Main(string[] args)
{
    // Create the connection.
    using (SqlConnection connection = new SqlConnection(@"Data Source=..."))
    {
        // Open the connection.
        connection.Open();

        // Create the command.
        using (SqlCommand command = new SqlCommand("xsp_Test", connection))
        {
            // Set the command type.
            command.CommandType = System.Data.CommandType.StoredProcedure;

            // Add the parameter.
            SqlParameter parameter = command.Parameters.Add("@dt",
                System.Data.SqlDbType.DateTime);

            // Set the value.
            parameter.Value = DateTime.Now;

            // Make the call.
            command.ExecuteNonQuery();
        }
    }
}

Tôi nghĩ một phần của vấn đề ở đây là bạn lo lắng rằng thực tế là thời gian ở UTC không được truyền tải đến SQL Server. Vì vậy, bạn không nên làm như vậy, bởi vì SQL Server không biết rằng một thời gian cụ thể nằm trong một khu vực / múi giờ cụ thể.

Nếu bạn muốn lưu trữ giá trị UTC, thì hãy chuyển đổi nó thành UTC trước khi chuyển nó đến SQL Server (trừ khi máy chủ của bạn có cùng múi giờ với mã máy khách tạo ra DateTime và thậm chí sau đó, đó là một rủi ro, IMO). SQL Server sẽ lưu trữ giá trị này và khi bạn lấy lại, nếu bạn muốn hiển thị nó theo giờ cục bộ, bạn phải tự thực hiện việc đó (DateTime struct sẽ dễ dàng thực hiện).

Tất cả những gì đang nói, nếu bạn thực hiện chuyển đổi và sau đó vượt qua ngày UTC được chuyển đổi (ngày có được bằng cách gọi ToUniversalTime , không phải bằng cách chuyển đổi thành một chuỗi) sang thủ tục được lưu trữ.

Và khi bạn lấy lại giá trị, hãy gọi ToLocalTime phương pháp để nhận thời gian theo múi giờ địa phương.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để chèn các ký tự Ả Rập vào cơ sở dữ liệu SQL?

  2. Kết nối SQL Server với cơ sở dữ liệu Java

  3. Gợi ý để triển khai bảng kiểm tra trong SQL Server?

  4. SQL - Trừ một giá trị cạn kiệt khỏi các hàng

  5. Phải khai báo biến vô hướng @Id?