我没怎么使用过 ADO.Net 中的参数。我正在编写一个自定义 .Net 数据提供程序(以 SqlClient 为模型),并且必须在继承自 DbParameter 的参数类中实现 IsNullable 属性。我的数据提供程序不支持存储过程,因此我仅支持输入(替换样式)参数。
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 的实现,他们的文档指出:
IsNullable
This property is not supported.
事实是,无论是通过 MS 驱动程序还是引用的 Oracle 驱动程序与 Oracle 10、11 或 12 交互时,此属性的值都是无关紧要的。
其他数据库上的行为当然可能有所不同。
关于c# - DbParameter IsNullable 功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1075863/