前提・実現したいこと
NPGSQLからpostgresqlに存在するストアドでデータ更新したいと考えています
データ更新の内容はヘッダテーブルと明細テーブルでレコードは1:Nとなり、ヘッダ用のパラメータ(データ件数1件)明細用のパラメータ(データ件数N件)です
ロック発生の可能性を下げるため、トランザクションはC#側で制御したくないためストアドを使いたいと思ってます
発生している問題・エラーメッセージ
上記の実装の仕方がわからず困ってます
・ストアド側のパラメータの型は?
・NPGSQLでパラメータをセットするときのデータ型は?
該当のソースコード
簡易的に下記の内容で試行錯誤してみましたがうまくいきません
lang
1■ストアド定義(定義部のみ) 2CREATE OR REPLACE FUNCTION public.pkg_hoge(ary hoge[]) 3 4■HOGE[]型 5CREATE TYPE hoge AS 6( 7 id bigint, 8 name character varying, 9 trx_date date 10);
lang
1■.NET 2HOGE[] dtPARA = new HOGE[3]; 3 4HOGE DR = new HOGE(); 5DR.ID = 1; 6DR.NAME = "HOGE"; 7DR.TRX_DATE = DateTime.Parse("2018/01/01"); 8dtPARA[0] = DR; 9 10DR = new HOGE(); 11DR.ID = 2; 12DR.NAME = "ORA"; 13DR.TRX_DATE = DateTime.Parse("2018/02/01"); 14dtPARA[1] = DR; 15 16using (NpgsqlConnection CN = new NpgsqlConnection(strCONNECT_INFO)) 17{ 18 CN.Open(); 19 20 using (NpgsqlCommand INST_CMD = new NpgsqlCommand()) 21 { 22 INST_CMD.CommandType = CommandType.StoredProcedure; 23 INST_CMD.CommandText = "PKG_HOGE"; 24 INST_CMD.Connection = CN; 25 26 INST_CMD.Parameters.Add(new NpgsqlParameter("@ARY", NpgsqlDbType.Arry | NpgsqlDbType.Box)); 27 28 /*記入漏れ:追記しました*/ 29 /*再記入漏れ:「Value」への代入を直しました*/ 30 INST_CMD.Parameters["@ARY"].Direction = ParameterDirection.Input; 31 INST_CMD.Parameters["@ARY"].Value = dtPARA; 32 /***********************/ 33 34 var RESULT = INST_CMD.ExecuteScalar();
※上記の「ExecuteScalar」で「Unable to cast data to Rectangle type」のエラーが発生します
補足情報(FW/ツールのバージョンなど)
VS2017 C# .net 4.7
Npgsql 2.2.3
postgresql 10.3, compiled by Visual C++ build 1800, 64-bit
よろしくお願いします
回答1件
あなたの回答
tips
プレビュー