【发布时间】:2013-08-26 17:57:01
【问题描述】:
Microsoft 何时开始强制使用“New”语句初始化数据集?我的公司有一个多年前启动的网站,其中很多数据集都是用类似
的语句声明的Dim someDataset as Dataset = Nothing
此代码已经运行了很长时间,但我们最近开始收到错误消息,指出值不能为空。参数名称:数据集。
我已尽力更新此旧代码,但我不知道我们正在使用的库有任何更新,我正在尝试确定是什么触发了此错误。谢谢
我想强调的是,在错误开始发生之前没有对代码进行任何更改,这听起来不太可能。这是一个大型应用程序,数据集以多种方式在其中使用。在最近开始出现此错误之前,它已投入生产多年并按预期工作。
【问题讨论】:
-
这样的改变听起来不太可能。它完全取决于您对数据集所做的工作。
-
VB 从 VB.Net 开始就需要实例。在 VB6 中有一些案例,在 VB.Net 中有少量案例,其中语言提供了默认实例。这通常与 UI 相关,但我不知道
DataSet会发生这种情况 -
FWIW,
Dim someDataset as Dataset = Nothing是多余的。您可以离开 `=Nothing` 部分,结果是完全相同的 IL。 -
但是该代码不是引发错误的地方,是吗?在您上面引用的声明和引发错误的点之间的某个地方,有另一段代码直接实例化数据集,或者通过将 someDataset 设置为返回数据集的函数的返回值,例如作为 DAL 中的 tableadapter 或类似的。这就是改变的地方;数据集不再被实例化。
-
DAL 是通常发生错误的地方。传回 UI 的数据集在加载和返回之前没有被初始化。根据函数,数据集是显式构建的,或者是从 DatabaseFactory 调用或 sqlAdapters 加载的。不是最初的开发者,我不确定他们为什么没有被初始化。但我不明白为什么这段代码已经工作了这么多年,只是在没有发布任何更改的情况下突然开始发送错误消息。我希望有人可能遇到过类似的问题并能告诉我原因。