DbParameter IsNullable功能?

时间:2009-07-02 18:09:33

标签: c# .net ado.net sqlclient sqlparameters

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

MSDN文档对IsNullable的功能还不太清楚,说明“获取或设置一个值,该值指示参数是否接受空值”。谷歌搜索结果让很多人对IsNullable的做法感到困惑,说将IsNullable设置为false并不禁止他们使用参数将是一个空值,正如他们所期望的那样。

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

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

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

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

1 个答案:

答案 0 :(得分:3)

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

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


支持此视图的是Oracle Oracle.DataAccess.Client.OracleParameter class的实现,其文档声明:

  

ISNULLABLE

     

不支持此属性。

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

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