我没有在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,我会很感激。
答案 0 :(得分:3)
IsNullable属性是信息性的。当代码的一部分创建参数而另一部分实际使用它时,它会很有用。例如,参数可能会自动从数据库派生,在这种情况下,程序员可以查看是否可以接受空值。
这是我对IsNullable属性的理解。我实际上并不知道任何“证明”这实际上是正确的文档。
支持此视图的是Oracle Oracle.DataAccess.Client.OracleParameter
class的实现,其文档声明:
ISNULLABLE
不支持此属性。
事实上,当通过MS驱动程序或引用的Oracle驱动程序与Oracle 10或11或12连接时,此属性的值无关紧要。
其他数据库上的行为当然可能有所不同。