sql >> Databasteknik >  >> RDS >> Sqlserver

Konvertering av C# datetime till sql server datetime ger ett fel

Din kod - som den är nu - kommer att överföra alla värden på strängnivå . Det här är ett riktigt dåligt tillvägagångssätt . De implicita konverteringarna som äger rum beror i hög grad på ditt systems inställningar (språk och kultur). Det värsta är:Detta kan fungera bra på din maskin medan du testar det, men på en kunds system bryter det med konstiga meddelanden. Glad felsökning :-(

Ändra din kod så här

foreach (PropertyInfo prop in props) {
    // Setting column names as Property names.
    if (prop.PropertyType.IsGenericType && prop.PropertyType.GetGenericTypeDefinition() == typeof(Nullable<>))
        dataTable.Columns.Add(prop.Name, prop.PropertyType.GetGenericArguments()[0]);
    else
        dataTable.Columns.Add(prop.Name, prop.PropertyType);
}

Detta kommer att lägga till kolumnen - även om detta är en nollbar typ - med rätt datatyp.

krediter: Det här svaret hjälpte mig

UPPDATERA Ännu enklare

(thx till Yves M. i en kommentar under det länkade svaret)

foreach (PropertyInfo prop in props) {
    // Setting column names as Property names.
        dataTable.Columns.Add(prop.Name, Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType);
}


  1. Snabbaste sättet att köra samma fråga flera gånger i SQL Server

  2. Samma fråga - olika genomförandeplaner

  3. Hur dödar du alla nuvarande anslutningar till en SQL Server 2005-databas?

  4. MySQL Data - Bästa sättet att implementera personsökning?