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

Mer*_*ovi 26 .net c# .net-3.5 sqlparameter

我做的是这样的:

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

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

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

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

private void TestParam(SqlParameter param) {
    string test = param.Value.ToString();  // Everything OK
}
Run Code Online (Sandbox Code Playgroud)

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

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

sla*_*dau 50

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

Parameter = new SqlParameter("@pname", Convert.ToInt32(0));
Run Code Online (Sandbox Code Playgroud)

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

谢谢Msdn :)


Mar*_*ell 7

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

就个人而言,我会用;

Value = 0
Run Code Online (Sandbox Code Playgroud)

也许在对象初始化器中.