sql >> Database teknologi >  >> RDS >> Sqlserver

Brug af DateTime i en SqlParameter til Stored Procedure, formateringsfejl

Hvordan opsætter du SqlParameter ? Du bør indstille SqlDbType egenskab til SqlDbType.DateTime og send derefter DateTime direkte til parameteren (konverter IKKE til en streng, du spørger da om en masse problemer).

Du burde være i stand til at få værdien ind i DB'en. Hvis ikke, er her et meget simpelt eksempel på, hvordan man gør det:

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

Jeg tror, ​​at en del af problemet her er, at du er bekymret for, at det faktum, at tiden er i UTC, ikke bliver overført til SQL Server. Til det formål bør du ikke, fordi SQL Server ikke ved, at et bestemt tidspunkt er i en bestemt lokalitet/tidszone.

Hvis du vil gemme UTC-værdien, skal du konvertere den til UTC, før du sender den til SQL Server (medmindre din server har samme tidszone som klientkoden, der genererer DateTime , og selv da er det en risiko, IMO). SQL Server gemmer denne værdi, og når du får den tilbage, hvis du vil vise den i lokal tid, skal du gøre det selv (hvilket er DateTime struct vil nemt gøre).

Alt dette er sagt, hvis du udfører konverteringen og derefter passerer den konverterede UTC-dato (datoen, der opnås ved at kalde ToUniversalTime metode, ikke ved at konvertere til en streng) til den lagrede procedure.

Og når du får værdien tilbage, ring til ToLocalTime metode til at få tiden i den lokale tidszone.



  1. Brug af regex i WHERE i Postgres

  2. Hvordan rulles tilbage, når der opstår en fejl under udførelse af sql loader-kommando?

  3. SQL-forespørgsel til at oversætte en liste over tal, der matches mod flere intervaller, til en liste med værdier

  4. Charlotte SQL Server-brugergruppe:Rette langsomme forespørgsler. Hurtig.