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

时间:2011-03-18 19:23:54

标签: c# .net .net-3.5 sqlparameters

我做的是这样的事情:

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

2 个答案:

答案 0 :(得分:48)

  

使用此过载时请小心   的SqlParameter构造函数   指定整数参数值。   因为这个重载需要一个值   输入Object,你必须转换   当对象类型的整数值   值为零,如下面的C#   示例演示。

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

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

感谢Msdn:)

答案 1 :(得分:7)

您传入的0是 类型 ,而不是值。 任何 枚举类型允许0个文字(和常量值) - 表示基础枚举类型的0,并且是比对象更好的“匹配”,因为它不是不需要拳击。

就个人而言,我会用;

Value = 0

也许在对象初始化器中。

相关问题