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

时间:2017-12-08 07:27:14

标签: c# .net postgresql devart

我在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。

  

未处理的类型' System.ArgumentOutOfRangeException'发生在Devart.Data.dll中   附加信息:输出参数' params'的值。在命令执行结果中不存在。

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

1 个答案:

答案 0 :(得分:0)

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