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

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

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

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

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


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

最佳答案

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

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



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


  是空的
  
  不支持此属性。


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

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

08-04 17:15