[英]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。
Devart.Data.dll中發生了類型為'System.ArgumentOutOfRangeException'的未處理異常
附加信息:命令執行結果中沒有輸出參數'params'的值。
使用復合參數的正確方法是什么? 根據DBMonitor的說法,它將傳遞正確的參數(3,“ lala”)以起作用,但是如何在c#代碼中檢索“ out”值?
使用復合類型INOUT參數的錯誤已修復: http : //forums.devart.com/viewtopic.php ?f=3&t= 36447 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.