代码之家  ›  专栏  ›  技术社区  ›  Darryl

dbParameter是否为空功能?

  •  2
  • Darryl  · 技术社区  · 15 年前

    我没有在ADO.NET中使用过很多参数。我正在编写一个自定义的.NET数据提供程序(基于sqlclient建模),并且必须在我的参数类中实现isNullable属性,它继承自dbParameter。我的数据提供程序不支持存储过程,所以我只支持输入(替换样式)参数。

    对于isNullable的功能,msdn文档相当不清楚,它声明“获取或设置一个指示参数是否接受空值的值”。googling让很多人对isNullable的功能感到困惑,说将isNullable设置为false并不能阻止他们使用一个参数,这将是一个空值,就像他们将要使用的那样。已经预料到了。

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

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

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

    为了避免为了了解sqlparameter对isNullable的实现是如何工作的而在一些测试代码中胡乱摆弄,如果有人能够用参数编写代码来解释isNullable,我将不胜感激。

    1 回复  |  直到 10 年前
        1
  •  3
  •   Martin Ba    10 年前

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

    这是我对不可剥夺财产的理解。我不知道有什么文件能证明这是正确的。


    支持这一观点的是 Oracle Oracle.DataAccess.Client.OracleParameter class ,其文档声明:

    可忽略的

    不支持此属性。

    事实上,当通过MS驱动程序或引用的Oracle驱动程序与Oracle 10、11或12接口时,此属性的值是无关的。

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