sql >> Databasteknik >  >> RDS >> Sqlserver

Använda DateTime i en SqlParameter för lagrad procedur, formatfel

Hur ställer du in SqlParameter ? Du bör ställa in SqlDbType egenskap till SqlDbType.DateTime och skicka sedan DateTime direkt till parametern (konvertera INTE till en sträng, du frågar efter en massa problem då).

Du bör kunna få in värdet i DB. Om inte, här är ett mycket enkelt exempel på hur 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();
        }
    }
}

Jag tror att en del av problemet här är att du är orolig för att det faktum att tiden är i UTC inte förmedlas till SQL Server. För det ändamålet borde du inte göra det, eftersom SQL Server inte vet att en viss tid är i en viss lokal/tidszon.

Om du vill lagra UTC-värdet, konvertera det till UTC innan du skickar det till SQL Server (såvida inte din server har samma tidszon som klientkoden som genererar DateTime , och även då är det en risk, IMO). SQL Server kommer att lagra detta värde och när du får tillbaka det, om du vill visa det i lokal tid, måste du göra det själv (vilket är DateTime struct kommer lätt att göra).

Allt som sagt, om du utför konverteringen och sedan passerar det konverterade UTC-datumet (datumet som erhålls genom att anropa ToUniversalTime metod, inte genom att konvertera till en sträng) till den lagrade proceduren.

Och när du får tillbaka värdet ringer du ToLocalTime metod för att få tiden i den lokala tidszonen.



  1. Php anropar sqlserver backup databas script, backup fil skapad och sedan raderad

  2. Använder SQLCipher med Android

  3. Problem med SQLiteOpenHelper på Android 2.X och 3.X

  4. Hur felsöker man Lås vänta timeout överskriden på MySQL?