[英]{"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.