c# - DbParameter IsNullable 功能?

标签 c# .net ado.net sqlclient sqlparameter

我没怎么使用过 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/

相关文章:

C# 需要将 sql 中的数据放入 DataGridView 并按行的日期排序

.net - 将参数传递给 .NET 定义的命令

c# - 有什么方法可以在 SQL Server 中设置较小的超时(毫秒)(使用 ADO.NET)?

c# - Moq回调不修改输入参数

c# - 如何在 .NET SoapFormatter 中控制命名空间?

c# - 最大化任务并发性 - 使用 TCP/IP 和特定端口过滤

c# - WaitAll 和完成事件的线程问题 - 信号触发异常

c# - .Net Remoting 仅使用一个连接?

C# linq groupby 包括 json

c# - 相同名称和类型的 DbParameter 实例可以与多个 DbCommand 实例共享吗?