Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Menggunakan DateTime dalam SqlParameter untuk Prosedur Tersimpan, kesalahan format

Bagaimana Anda menyiapkan SqlParameter ? Anda harus mengatur SqlDbType properti ke SqlDbType.DateTime lalu berikan DateTime langsung ke parameter (JANGAN mengonversi ke string, Anda meminta banyak masalah saat itu).

Anda harus bisa memasukkan nilai ke dalam DB. Jika tidak, berikut adalah contoh yang sangat sederhana tentang cara melakukannya:

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();
        }
    }
}

Saya pikir sebagian dari masalah di sini adalah Anda khawatir bahwa fakta bahwa waktu dalam UTC tidak disampaikan ke SQL Server. Untuk itu, Anda tidak boleh melakukannya, karena SQL Server tidak mengetahui bahwa waktu tertentu berada di lokal/zona waktu tertentu.

Jika Anda ingin menyimpan nilai UTC, maka konversikan ke UTC sebelum meneruskannya ke SQL Server (kecuali server Anda memiliki zona waktu yang sama dengan kode klien yang menghasilkan DateTime , dan itupun resikonya, IMO). SQL Server akan menyimpan nilai ini dan ketika Anda mendapatkannya kembali, jika Anda ingin menampilkannya dalam waktu lokal, Anda harus melakukannya sendiri (yang DateTime struct akan mudah dilakukan).

Semua itu dikatakan, jika Anda melakukan konversi dan kemudian melewati tanggal UTC yang dikonversi (tanggal yang diperoleh dengan memanggil ToUniversalTime metode, bukan dengan mengonversi ke string) ke prosedur tersimpan.

Dan saat Anda mendapatkan nilainya kembali, panggil ToLocalTime metode untuk mendapatkan waktu dalam zona waktu lokal.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana SCHEMA_ID() Bekerja di SQL Server

  2. Hitung jam kerja antara dua tanggal

  3. JSON_MODIFY() Contoh di SQL Server (T-SQL)

  4. CONVERT() dari Tanggal/Waktu ke Contoh String di SQL Server

  5. Pos Pemeriksaan Basis Data di SQL Server