【发布时间】:2011-02-09 10:33:30
【问题描述】:
我正在使用带有插入语句的类型化数据集;我有一个表,其中定义了一个 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 传递)设置为数据库中的空值?
【问题讨论】:
-
附加跟进:这里的部分问题是我无法调试它。作为一种变通方法,我复制了对象并制作了自己的对象。由于类型化的数据集为其表格适配器创建了部分类,因此我利用它并添加了 Insert 对象的副本。这使我可以在其上放置断点并查看值是什么。第二部分:如果您查看 FormViewInsertEventArgs,日期被发送为空。但是,当您将其与 Insert 方法进行比较时,您会发现它已更改为 {1/1/0001 12:00:00 AM}...需要更多工作...
-
好的,MS 实现其反射例程的方式肯定有一个错误。如果我将方法中的参数类型更改为字符串,它会显示为空白。如果我评估 Nullable
nix = "";我确实得到一个空值。 必须 ObjectDataSourceMethod GetResolvedMethodData() 调用中有问题,因为它正在创建一个参数列表来调用该方法。在某个地方,我认为它只是在做一个新的 DateTime(),而不是一个新的 Nullable ()。我只是没有更多的时间去寻找它。