2

我在 ADO.Net 中使用的参数不多。我正在编写一个自定义的 .Net 数据提供程序(以 SqlClient 为模型),并且必须在我的参数类中实现 IsNullable 属性,该属性继承自 DbParameter。我的数据提供者不支持存储过程,所以我只支持输入(替换样式)参数。

MSDN 文档对 IsNullable 的功能相当不清楚,指出“获取或设置一个值,指示参数是否接受空值”。谷歌搜索发现很多人对 IsNullable 的作用感到困惑,他们说将 IsNullable 设置为 false 并不禁止他们使用参数,这将是一个空值,正如他们所期望的那样。

基于此,我认为 IsNullable 属性可能与存储过程的使用有关,以及存储过程的参数是否可以为空,而不是参数值是否可以为空。

在这种情况下,由于我没有存储过程,我的实现可以是:

        public override bool IsNullable { get { return false; } set {} }

为了避免不得不摆弄一些测试代码来了解 SqlParameter 的 IsNullable 实现如何工作,如果有使用参数编写代码的经验的人可以解释 IsNullable,我将不胜感激。

4

1 回答 1

3

IsNullable 属性是信息性的。当一部分代码创建参数而另一部分实际使用它时,这很有帮助。例如,参数可能是自动从数据库中派生的,在这种情况下,有助于程序员了解是否可能接受空值。

这是我对 IsNullable 属性的理解。我实际上并不知道任何“证明”这实际上是正确的文档。


支持这种观点的是OracleOracle.DataAccess.Client.OracleParameter的实现,他们的文档指出:

可空的

不支持此属性。

事实上,当通过 MS 驱动程序或引用的 Oracle 驱动程序与 Oracle 10 或 11 或 12 交互时,此属性的值无关紧要。

当然,其他数据库上的行为可能会有所不同。

于 2009-07-04T13:00:27.497 回答