我没有在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连接时,此属性的值无关紧要。
当然,其他数据库上的行为也可能有所不同。