我正在尝试使用 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)...
编辑:我没有收到任何错误消息,但是我没有得到预期的结果集,而是得到一个空的结果集,其中包含一个与我试图调用的函数同名的列。