Code: Select all
create type "test_complex_rec" as (
num$ numeric,
str$ character varying
)
Code: Select all
create or replace function "test_complex_fun"(INOUT params "test_complex_rec") as
$BODY$
begin
params.num$ := params.num$ + 1;
params.str$ := 'some result';
end;
$BODY$ LANGUAGE plpgsql
Code: Select all
using (var q1 = new PgSqlCommand("test_complex_fun", connection) { CommandType = CommandType.StoredProcedure })
{
var rowType = PgSqlRowType.GetRowType("test_complex_rec", connection);
var complexValue = new PgSqlRow(rowType);
complexValue[0] = 3;
complexValue[1] = "lala";
var compositeParam = new PgSqlParameter("params", complexValue)
{
Direction = ParameterDirection.InputOutput
};
// add it manually
//q1.Parameters.Add(compositeParam);
// lets try describe from metadata
q1.ParameterCheck = true;
q1.Prepare();
q1.Parameters[0].Value = complexValue;
q1.ExecuteNonQuery(); // Anyway, we will get ArgumentOutOfRange
}
What is correct way to work with composite arguments? According to DBMonitor it will pass correct parameter (3, 'lala') to function, but how to retrieve 'out' value in c# code?An unhandled exception of type 'System.ArgumentOutOfRangeException' occurred in Devart.Data.dll
Additional information: The value for the output parameter 'params' is absent in the command execution result.