【问题标题】:SqlParameter with default value set to 0 doesn't work as expected默认值设置为 0 的 SqlParameter 无法按预期工作
【发布时间】:2011-07-18 10:20:04
【问题描述】:

我正在做这样的事情:

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

【问题讨论】:

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


【解决方案1】:

使用此重载时要小心 SqlParameter 构造函数的 指定整数参数值。 因为这个重载的值是 类型对象,您必须转换 对象类型的整数值,当 值为零,如下C# 示例演示。

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

如果您不执行此转换, 编译器假设你是 试图调用 SqlParameter (字符串,SqlDbType)构造函数 超载。

谢谢Msdn :)

【讨论】:

    【解决方案2】:

    您传入的 0 是 类型,而不是值。 any 枚举类型允许使用 0 字面量(和常量值) - 表示底层枚举类型的 0,并且比对象更好的“匹配”,因为它不不需要拳击。

    就个人而言,我会使用;

    Value = 0
    

    可能在对象初始化器中。

    【讨论】:

      猜你喜欢
      • 2015-10-02
      • 2019-12-07
      • 2014-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-06
      • 2014-11-02
      • 2010-12-30
      相关资源
      最近更新 更多