Переполнение SqlDateTime, вызванное типизированной вставкой набора данных - PullRequest
2 голосов
/ 18 апреля 2010

Я использую типизированный набор данных с оператором вставки; У меня есть таблица с полем smalldatetime, определенным для принятия нулевых значений. Когда я вставляю из .NET 2.0 FormView, я получаю «переполнение SqlDateTime. Должно быть между 01.01.1753 12:00:00 и 31.12.9999 11:59:59 PM».

Теперь я прочитал это сообщение , а параметр, отправленный конструктору класса, определен как

global::System.Nullable<global::System.DateTime> DoB

Итак, похоже, он должен принимать Nullable obj. Кроме того, сгенерированный код проверяет отправленное значение.

        if ((DoB.HasValue == true)) {
            command.Parameters[6].Value = ((System.DateTime)(DoB.Value));
        }
        else {
            command.Parameters[6].Value = global::System.DBNull.Value;
        }

В частности, ошибка возникает при запуске сгенерированного SqlClient.SqlCommand.ExecuteScalar ():

        try {
            returnValue = command.ExecuteScalar();
        }

Итак, я предполагаю, что мой вопрос таков: как мне использовать Typed DataSet, чтобы установить пустое значение (переданное из FormView в CommandName = Insert) в ноль в базе данных?

1 Ответ

1 голос
/ 19 апреля 2010

Хорошо, вот что у меня сработало. Во-первых, чтобы повторить, у меня есть Типизированный DataSet с DataAdapters, который генерирует объекты ADO. Итак, на моей странице я могу создать ObjectDataSource с типом, который указывает на мой адаптер, и затем назвать различные методы доступа, размещенные там.

Нет, у меня есть Вставка в таблицу, где в основном все столбцы обнуляются; немного varchar, немного smalldatetime.

Когда я отправляю пустую форму, я хотел бы, чтобы вводились нулевые значения. Это не так, и выдается много разных ошибок. В итоге я создал подкласс ObjectDataSource, чтобы получить доступ к событию Inserting. (подкласс для повторного использования) В событии Inserting я перебрал InputParameters, и, если это была строка и == "", я установил его в null Кроме того, вы не можете установить для ConvertNullToDBNull значение true; это приводит к сбою строк. Это успешно позволило Nullable остаться нулевым.

...