Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Преобразуването на C# datetime в sql server datetime извежда грешка

Вашият код - както е сега - ще прехвърли всяка стойност на ниво низ . Това е наистина лош подход . Неявните преобразувания, които се извършват, силно зависят от настройките на вашата система (език и култура). Най-лошата част е:това може да работи чудесно на вашата машина, докато я тествате, но в системата на клиента се поврежда със странни съобщения. Приятно отстраняване на грешки :-(

Променете кода си по този начин

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

Това ще добави колоната - дори ако това е nullable тип - с правилния тип данни.

кредити: Този отговор ми помогна

АКТУАЛИЗИРАНЕ Още по-лесно

(Благодаря на Ив М. в коментар под свързания отговор)

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. SQL Server Тригер за работа върху множество вмъквания на ред

  2. Актуализиране на заявка с корелирана подзаявка

  3. Как да замените низ, ако записът е NULL в T-SQL

  4. Как да предефинирате колоните, върнати от съхранена процедура в SQL Server

  5. SQL WHERE.. IN клауза няколко колони