4

Npgsql を使用して、CHARACTER をパラメーターとして受け取る関数 (ストアド プロシージャ) を呼び出そうとしていますが、機能しません。パラメーターなしで、または INTEGER パラメーターを使用して同じ関数を宣言すると、必要な結果セットが得られます。パラメータをCHARACTERとして宣言すると、機能しなくなります。なにが問題ですか?

ここに私の関数のコードがあります:

CREATE OR REPLACE FUNCTION testrefcursor1(in xxx character varying(10)) RETURNS SETOF refcursor AS
$$
DECLARE 
  ref1 refcursor;
  ref2 refcursor;
BEGIN

OPEN ref1 FOR 
 SELECT * FROM accounts;
RETURN NEXT ref1;

OPEN ref2 FOR 
 SELECT * FROM accounts;
RETURN NEXT ref2;

RETURN;
END;
$$
LANGUAGE plpgsql;

そして、ここに私が使用しているC#コードがあります:

var connection = new Npgsql.NpgsqlConnection(connectionString.ConnectionString);

connection.Open();
var trans = connection.BeginTransaction();

var command = new Npgsql.NpgsqlCommand("testrefcursor1", connection);
command.CommandType = System.Data.CommandType.StoredProcedure;

var parameter = command.CreateParameter();
parameter.ParameterName = "xxx";
parameter.DbType = System.Data.DbType.String;
parameter.Value = "10";
command.Parameters.Add(parameter);

var da = new Npgsql.NpgsqlDataAdapter(command);
var ds = new System.Data.DataSet();
da.Fill(ds);

trans.Commit();
connection.Close();

パラメータをCHARACTER、CHARACTER(10)、CHARACTER VARYING、およびCHARACTER VARYING(10)として宣言しようとしました...

編集:エラーメッセージは表示されませんが、期待される結果セットを取得する代わりに、呼び出しようとしている関数と同じ名前の単一の列を持つ空の結果セットを取得します。

4

4 に答える 4

2

どの Npgsql バージョンを使用していますか?

また、NpgsqlDbType を使用してパラメータの型を指定できますか? マッピングが正確でなく、Npgsql が使用しようとしている関数を見つけられず、機能しない場合があります。

Npgsql は、関数名とパラメーターの型が完全に一致するものを見つけようとします。DbString は、テキスト パラメーターの型と一致します。パラメータのタイプをテキストに変更して試してみませんか?

お役に立てば幸いです。

于 2010-03-05T18:38:09.463 に答える
1

これがあなたの問題と関係があるかどうかはわかりませんが、昨日、PostgreSQL には char(1) 型とは異なる「シングルバイト内部型」char があるという事実に出くわしました。たぶん、これらについていくつかの混乱がありますか?

于 2009-09-01T08:30:11.433 に答える