Получить переполнение SqlDateTime в SqlBulkCopy.WriteToServer ()

Я вставляю данные из типизированного набора данных в свою базу данных MSSQL с помощью класса SqlBuldCopy:

foreach (DataTable dt in ds.Tables)
{
    using (SqlBulkCopy bulkCopy = new SqlBulkCopy(conn)) 
    {
        bulkCopy.DestinationTableName = "dbo." + dt.TableName + "_neu";

        try
        {
            bulkCopy.WriteToServer(dt);
        }
        catch (Exception ex)
        {
            throw new FaultException("\n" + dt.TableName + ": " + ex.Message);
        }
    }
}

Работает отлично. Но когда я вставляю DataTime.MinValue в свою базу данных, я получаю эту ошибку: переполнение SqlDateTime. Должно быть между 01.01.1753 00:00:00 и 31.12.1999 23:59:59. Есть ли способ сказать в foreach что-то вроде этого: если значение поля DateTime из набора данных равно DateTime.MinValue, не вставляйте поле DateTime из набора данных в мою базу данных?

С наилучшими пожеланиями


person Marc    schedule 15.12.2009    source источник


Ответы (3)


Я думаю, вам нужно убедиться, что в таблице данных нет DateTime.MinValue - вы контролируете заполнение этой таблицы?

В таком случае вместо хранения DateTime.MinValue в поле DateTime используйте SqlDateTime.MinValue вместо этого. Или вместо этого сохраните DBNull в таблице данных, если вы хотите, чтобы NULL сохранялся в БД.

person AdaTheDev    schedule 15.12.2009
comment
Спасибо за ваш ответ. Я не контролирую популяцию данных. Я получаю базу данных из веб-службы. Как проверить перед bulkCopy.WriteToServer (dt); если поле DateTime не DateTime.MinValue? Если true, сохраните DBNull в базе данных. - person Marc; 15.12.2009
comment
Вы можете перебирать каждую строку и изменять все поля DateTime, которые имеют DateTime.MinValue - person AdaTheDev; 15.12.2009

Если у вас есть SQL Server 2008 и вы не против сохранить MinValue, вы можете обойти это, используя DateTime2.

person RichardOD    schedule 15.12.2009

person    schedule
comment
Пожалуйста, добавьте текст также туда, где вы изменили, чтобы исправить проблему. - person Garry; 14.07.2015