我在 C++/CLI 项目中使用 NpgsqlParameter 得到了奇怪的结果。
NpgsqlParameter^ status = wCMD->Parameters->Add(gcnew NpgsqlParameter("param1", NpgsqlDbType::Array | NpgsqlDbType::Smallint));
status->Direction = System::Data::ParameterDirection::InputOutput;
status->Value = DBNull::Value;
status->Size = 20;
CALL MySchema.MyProcedure(:param1);
在 MyProcedure 中,我将 null 和 0 的数组分配给 param1:
CREATE OR REPLACE PROCEDURE MySchema.MyProcedure(
INOUT param1 smallint[])
LANGUAGE 'plpgsql'
AS $BODY$
BEGIN
param1 := array[null, 0];
raise notice 'param1: %', param1;
$BODY$;
然后我在 C++/CLI 项目中得到了以下奇怪的结果:NpgsqlValue with arrays of shorts is [0, 0]
有人可以帮我解释一下为什么 NpgsqlParameter 收到零数组而不是 null 和 0 吗?
也许 C++ 中的 NULL 是 0?或者数组不能接收NULL?
我怎样才能从 postgres 收到正确的返回结果?示例:带有短裤数组的 NpgsqlValue 是 [NULL, 0]
我正在使用 npgsql 4.1.12,postgresql 14。
多谢。
PostgreSQL 提供商 Npgsql 的首席开发人员 Roji 是这样回答我的:
详情请参考这里:Github-npgsql