Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Използване на DateTime в SqlParameter за Съхранена процедура, грешка при форматирането

Как настройвате SqlParameter ? Трябва да зададете SqlDbType свойство на SqlDbType.DateTime и след това предайте DateTime директно към параметъра (НЕ преобразувайте в низ, тогава питате за куп проблеми).

Трябва да можете да получите стойността в DB. Ако не, ето един много прост пример как да го направите:

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

Мисля, че част от проблема тук е, че се притеснявате, че фактът, че времето е в UTC, не се предава на SQL Server. За тази цел не трябва, защото SQL Server не знае, че определено време е в определен локал/часова зона.

Ако искате да съхраните UTC стойността, след това я преобразувайте в UTC, преди да я предадете на SQL Server (освен ако вашият сървър има същата часова зона като клиентския код, генериращ DateTime и дори тогава това е риск, IMO). SQL Server ще съхрани тази стойност и когато я получите обратно, ако искате да я покажете в местно време, трябва да го направите сами (което DateTime struct лесно ще направи).

Всичко това се казва, ако извършите преобразуването и след това предадете преобразуваната UTC дата (датата, която се получава чрез извикване на ToUniversalTime метод, а не чрез преобразуване в низ) към съхранената процедура.

И когато получите обратно стойността, извикайте ToLocalTime метод за получаване на часа в местната часова зона.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Правилен метод за изтриване на над 2100 реда (по ID) с Dapper

  2. Проблеми с производителността на SQL Server 2012 Enterprise Edition при лицензиране на CAL

  3. Извличане на изображение от база данни в asp.net

  4. Колко важен е редът на колоните в индексите?

  5. Подобрения на брокера на услуги в SQL Server 2016