[英]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.