繁体   English   中英

默认值设置为0的SqlParameter无法按预期方式工作

[英]SqlParameter with default value set to 0 doesn't work as expected

我做的是这样的:

SqlParameter param = new SqlParameter("@Param", 0) { SqlDbType = SqlDbType.Int };

private void TestParam(SqlParameter param) {
   string test = param.Value.ToString();  // Getting NullReferenceException here
}

但是,当我这样说时,我停止获取异常:

SqlParameter param = new SqlParameter("@Param", SqlDbType.Int)  { Value = 0 };

private void TestParam(SqlParameter param) {
    string test = param.Value.ToString();  // Everything OK
}

任何人都可以告诉我为什么SqlParameter假设0与null相同?

编辑: MSDN在此解释: SqlParameter构造函数

使用SqlParameter构造函数的此重载指定整数参数值时请小心。 因为此重载采用Object类型的值,所以当值为零时,必须将整数值转换为Object类型,如下面的C#示例所示。

 Parameter = new SqlParameter("@pname", Convert.ToInt32(0)); 

如果不执行此转换,编译器会假定您尝试调用SqlParameter(string,SqlDbType)构造函数重载。

谢谢Msdn :)

您传入的0是类型 ,而不是值。 任何枚举类型允许0个文字(和常量值) - 意味着底层枚举类型的0,并且是比对象更好的“匹配”,因为它不需要装箱。

就个人而言,我会用;

Value = 0

也许在对象初始化器中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM