我正在使用带有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?
答案 0 :(得分:1)
好的,这就是对我有用的东西。首先,重申一下,我有一个带DataAdapter的Typed DataSet,它正在生成ADO对象。因此,在我的页面上,我可以创建一个ObjectDataSource,其类型指向我的适配器,然后命名其中包含的不同访问方法。
不,我有一个表格的插入,基本上所有列都可以为空;一些varchar,一些smalldatetime。
当我提交一个空表格时,我想要输入空值。它们不是,并且抛出了许多各种错误。我最终做的是继承ObjectDataSource以获得对Inserting事件的访问。 (可重用性的子类)在Inserting事件中,我遍历InputParameters,如果它是一个字符串并且==“”,我将它设置为null。此外,您不能将ConvertNullToDBNull设置为true;导致字符串失败。这成功地允许Nullable保持为空。