簡體   English   中英

{"Parameter must have its value set"} 處理 NPGSQL 中可能的 null 值

[英]{"Parameter must have its value set"} dealing with possible null values in NPGSQL

我有一個參數可以是 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 並且有時包含一個值

要表示 null 參數值,請將Value設置為DBNull.Instance ,而不是 null。


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中的開關

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM