Typed DataSet Insert抛出SqlDateTime溢出

时间:2010-04-18 18:25:44

标签: strongly-typed-dataset

我正在使用带有Insert语句的Typed DataSet;我有一个表定义了smalldatetime字段以接受空值。当我从.NET 2.0 FormView插入时,我得到一个“SqlDateTime溢出。必须在1/1/1753 12:00:00 AM和12/31/9999 11:59:59 PM之间。”

现在,我已阅读this post,发送给类构造函数的参数定义为

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设置一个空值(从CommandName = Insert上的FormView传递)到数据库中的null?

1 个答案:

答案 0 :(得分:1)

好的,这就是对我有用的东西。首先,重申一下,我有一个带DataAdapter的Typed DataSet,它正在生成ADO对象。因此,在我的页面上,我可以创建一个ObjectDataSource,其类型指向我的适配器,然后命名其中包含的不同访问方法。

不,我有一个表格的插入,基本上所有列都可以为空;一些varchar,一些smalldatetime。

当我提交一个空表格时,我想要输入空值。它们不是,并且抛出了许多各种错误。我最终做的是继承ObjectDataSource以获得对Inserting事件的访问。 (可重用性的子类)在Inserting事件中,我遍历InputParameters,如果它是一个字符串并且==“”,我将它设置为null。此外,您不能将ConvertNullToDBNull设置为true;导致字符串失败。这成功地允许Nullable保持为空。