Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Używanie DateTime w SqlParameter dla procedury składowanej, błąd formatu

Jak konfigurujesz SqlParameter? ? Powinieneś ustawić SqlDbType właściwość SqlDbType.DateTime a następnie przekaż DateTime bezpośrednio do parametru (NIE konwertuj na ciąg, wtedy pytasz o kilka problemów).

Powinieneś być w stanie pobrać wartość do DB. Jeśli nie, oto bardzo prosty przykład, jak to zrobić:

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

Myślę, że częścią problemu jest to, że martwisz się, że fakt, iż czas jest w UTC, nie jest przekazywany do SQL Server. W tym celu nie powinieneś, ponieważ SQL Server nie wie, że określony czas jest w określonej lokalizacji/strefie czasowej.

Jeśli chcesz przechowywać wartość UTC, przekonwertuj ją na UTC przed przekazaniem jej do SQL Server (chyba że Twój serwer ma tę samą strefę czasową co kod klienta generujący DateTime , a nawet wtedy jest to ryzyko, IMO). SQL Server przechowa tę wartość, a gdy ją odzyskasz, jeśli chcesz wyświetlić ją w czasie lokalnym, musisz zrobić to sam (co oznacza DateTime struct z łatwością to zrobi).

Biorąc to wszystko pod uwagę, jeśli wykonasz konwersję, a następnie przekażesz przekonwertowaną datę UTC (data uzyskana przez wywołanie funkcji ToUniversalTime metody, a nie przez konwersję na ciąg) do procedury składowanej.

A kiedy odzyskasz wartość, wywołaj ToLocalTime metoda, aby uzyskać czas w lokalnej strefie czasowej.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zdobądź wszystkich rodziców na dziecko

  2. Ulepszenia Service Broker w SQL Server 2016

  3. Jak SHOWPLAN_XML działa w SQL Server

  4. Zdarzenia oczekiwania serwera SQL -1

  5. Jak zastosować formatowanie warunkowe do liczby w programie SQL Server za pomocą FORMAT()