【问题标题】:{"Parameter must have its value set"} dealing with possible null values in NPGSQL{"Parameter must have its value set"} 处理 NPGSQL 中可能的空值
【发布时间】:2021-05-14 03:52:58
【问题描述】:

我有一个参数可以是 long 或 null,

这是我的代码

        public List<blahOject>GetBlahNOde(long? p_test)
        {
                    ...


                    cmd.Parameters.Add(new NpgsqlParameter
                    {
                        ParameterName = "test",
                        Value = p_test
                    });

        }

当我尝试运行我的方法时,我可能会出错

{"Parameter 'test' must have its value set"}

不确定如何使用可能的 null 值进行这项工作,p_test 并不总是 null 并且有时包含一个值

【问题讨论】:

    标签: postgresql npgsql


    【解决方案1】:

    要表示一个空参数值,请将Value 设置为DBNull.Instance,而不是空。

    【讨论】:

      【解决方案2】:
      
      private static NpgsqlParameter safeNpgsqlParameter<T>( string parameterName, T? data ) where T : struct =>
          data switch {
              decimal => new NpgsqlParameter() { ParameterName = parameterName, NpgsqlDbType = NpgsqlDbType.Numeric, Value = data },
              Enum    => new NpgsqlParameter() { ParameterName = parameterName, Value = data },
              null    => new NpgsqlParameter() { ParameterName = parameterName, Value = DBNull.Value },
              LocalDate => new NpgsqlParameter() {
                  ParameterName = parameterName,
                  NpgsqlDbType  = NpgsqlDbType.Date,
                  Value         = data
              },
              _ => throw new DbUpdateException()
          };
      
      

      像这样使用:

      // spec.Date is of type LocalDate?
      cmd.Parameters.Add( safeNpgsqlParameter( "SomeDateParam", spec.Date ) );
      
      // spec.MyEnum is of type MyEnum?
      cmd.Parameters.Add( safeNpgsqlParameter( "MyEnumParam", spec.MyEnum ) );
      
      // spec.Qty is of type decimal?
      cmd.Parameters.Add( safeNpgsqlParameter( "SomeNumericParam", spec.Qty ) );
      
      

      当然,其他类型也可以添加到safeNpgsqlParameter内的开关中

      【讨论】:

        猜你喜欢
        • 2022-12-09
        • 1970-01-01
        • 2019-11-24
        • 2021-03-26
        • 2018-04-13
        • 1970-01-01
        • 2022-01-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多