我使用带有Insert语句的Typed DataSet;我有一个表中有一个smalldatetime字段被定义为接受空值。当我从.NET 2.0 FormView插入时,出现“SqlDateTime溢出,必须在1/1/1753 12:00:00 AM和12/31/9999 11:59:59 PM之间。”现在Typed DataSet引发的SqlDateTime溢出插入
,我读过this post,并且发送到类的构造函数的参数定义为
global::System.Nullable<global::System.DateTime> DoB
因此,它看起来像它应该接受一个可空的obj。此外,生成的代码正在测试发送的值。
try {
returnValue = command.ExecuteScalar();
}
所以,我想我的问题是:我怎么使用强类型DataSet将一个空的
if ((DoB.HasValue == true)) {
command.Parameters[6].Value = ((System.DateTime)(DoB.Value));
}
else {
command.Parameters[6].Value = global::System.DBNull.Value;
}
具体而言,当产生SqlClient.SqlCommand.ExecuteScalar()运行在错误发生值(从CommandView = Insert上的FormView传递)到数据库中的空值?
其他跟进:这里的部分问题是我无法调试。作为解决方法,我复制了该对象并创建了自己的对象。由于类型化数据集为他们的表适配器创建了部分类,我点击它并添加了Insert对象的副本。这让我在它上面放置了一个断点,看看这些值是什么。 第二部分:如果您查看FormViewInsertEventArgs,日期被发送为空。但是,当您将其与Insert方法进行比较时,您会发现它已更改为{1/1/0001 12:00:00 AM} ...需要更多工作... – 2010-04-18 19:50:15
好的,必须有一个错误MS实施其反射例程的方式。如果我将我的方法中的参数类型更改为字符串,它会以空白形式出现。如果我评估Nullable nix =“”;我*做*得到空。在ObjectDataSourceMethod GetResolvedMethodData()调用中,必须有*错误,因为它创建了一个参数列表来调用该方法。在某处,我认为它只是在做一个新的DateTime(),而不是一个新的Nullable ()。我只是没有更多时间去寻找它。 –
2010-04-18 21:16:39