如何在 DevArt PostgreSql dotConnect 处理复合类型参数

How to deal with composite type arguments at DevArt PostgreSql dotConnect

我在 postgre 中有这样的东西:

create type "test_complex_rec" as (
                           num$ numeric,
                           str$ character varying
                           )

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

和 C# 代码:

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
}

执行最后一行将引发 ArgumentOutOfRange。

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.

使用复合参数的正确方法是什么?根据 DBMonitor 它将正确的参数 (3, 'lala') 传递给函数,但是如何在 c# 代码中检索 'out' 值?

修复了使用复合类型 INOUT 参数的错误:http://forums.devart.com/viewtopic.php?f=3&t=36447.