gpt4 book ai didi

c# - 使用npgsql调用以字符为参数的函数

转载 作者:太空狗 更新时间:2023-10-30 00:36:38 28 4
gpt4 key购买 nike

我正在尝试使用 Npgsql 来调用一个以字符作为参数的函数(存储过程),但它不起作用。如果我在不带参数或带 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)...

编辑:我没有收到任何错误消息,但我没有收到预期的结果集,而是收到了一个空结果集,其中只有一个列与我尝试调用的函数同名。

最佳答案

您正在将 Unicode 参数传递给 ASCII 参数。

改变这一行:

parameter.DbType = System.Data.DbType.String;

收件人:

parameter.DbType = System.Data.DbType.AnsiString;

通常,Postgres 的 varchar 列是 Unicode 格式,前提是数据库上的 Unicode 选项已启用 (see here)。我的猜测是它不是,并且您的参数无法将自身转换为要通过函数传递的正确类型。

关于c# - 使用npgsql调用以字符为参数的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1302925/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com