SqlParameter 类继承自抽象基类DbParameter,它定义了
public abstract bool IsNullable {get; set;}
所以SqlParameter
需要有一个公共的IsNullable
属性实现。该类DbParameter
是所有数据库参数实现的基类,包含在System.Data
.
必须假设还有其他 DBMS 明确允许或拒绝将过程或函数参数明确定义为可空或不可空,并且SqlParameter.IsNullable
仅因为 SqlParameter 实现更通用的通用数据库参数类和其他 .NET 通用的接口而存在数据库交互类。
查看反射器,SqlParameter
该类不使用IsNullable
,除了在将值转换为“InstanceDescriptor”时传递值。我没有深入研究InstanceDescriptor
该类的用途,但我确实检查了SqlCommand
该类,特别是该BuildParamList
方法,该方法将 转换SqlParameterCollection
为发送到数据库的参数的 SQL 字符串。
该BuildParamList
方法循环通过SqlParameterCollection
, 并使用 aStringBuilder
来构建参数字符串。BuildParamList
不在IsNullable
其实现中的任何地方使用属性或值。事实上,对的引用SqlParameter.IsNullable
不会出现在 SqlCommand 类的任何地方。
我可能在某些将SqlParameter
对象传递给不同类的内部/私有方法中错过了对它的引用,但如果该BuildParamList
方法不使用它,那没关系,因为它不会影响发送到 SQL 的 SQL 字符串服务器。
除了您执行的测试用例之外,检查类的内容支持您可以安全地忽略属性值SqlCommand
的结论。SqlParameter.IsNullable
在处理 SQL Server 方面,我在 Internet 上进行了快速搜索,以查看是否可以找到任何允许显式可为空/不可为空的过程或函数参数的 DBMS。当我遇到对 DB2 的引用时,我停下了脚步,该引用似乎需要在过程上设置特定属性以允许将空值传递给它。我不知道任何具有此功能的当代 RDBMS,而且我的搜索没有产生任何其他结果。