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

Konwersja C# datetime na sql server datetime powoduje błąd

Twój kod - tak jak jest teraz - przeniesie dowolną wartość na poziomie ciągu znaków . To naprawdę złe podejście . Zachodzące konwersje niejawne są w dużym stopniu zależne od ustawień systemu (języka i kultury). Najgorsze jest to, że może to działać świetnie na twoim komputerze podczas testowania, ale w systemie klienta przerywa się dziwnymi wiadomościami. Miłego debugowania :-(

Zmień swój kod w ten sposób

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

Spowoduje to dodanie kolumny - nawet jeśli jest to typ dopuszczający wartość null - z prawidłowym typem danych.

kredyty: Ta odpowiedź mi pomogła

AKTUALIZACJA Jeszcze prostsze

(dzięki Yvesowi M. w komentarzu pod odpowiedzią pod linkiem)

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 7 sposobów na znalezienie zduplikowanych wierszy w SQL Server, ignorując dowolny klucz podstawowy

  2. Jak odwołać się do jednego CTE dwukrotnie?

  3. Zmień domyślny format daty i godziny w pojedynczej bazie danych w SQL Server

  4. Kiedy należy używać NOLOCK?

  5. Dynamicznie przeszukuj kolumny dla podanej tabeli