我做的是这样的事情:
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 Constructor
答案 0 :(得分:48)
使用此过载时请小心 的SqlParameter构造函数 指定整数参数值。 因为这个重载需要一个值 输入Object,你必须转换 当对象类型的整数值 值为零,如下面的C# 示例演示。
Parameter = new SqlParameter("@pname", Convert.ToInt32(0));
如果您不执行此转换, 编译器假定你是 试图调用SqlParameter (string,SqlDbType)构造函数 过载。
感谢Msdn:)
答案 1 :(得分:7)
您传入的0是 类型 ,而不是值。 任何 枚举类型允许0个文字(和常量值) - 表示基础枚举类型的0,并且是比对象更好的“匹配”,因为它不是不需要拳击。
就个人而言,我会用;
Value = 0
也许在对象初始化器中。