我试图用C#代码
在pgresql中调用我的用户定义函数我的函数创建脚本如下,
CREATE OR REPLACE FUNCTION public."GetUserDailyData"(
cid integer,
hid integer,
currday integer)
RETURNS character varying AS
$BODY$
DECLARE
returndata varchar = '';
BEGIN
SELECT data->20+currday into returndata FROM pops
WHERE hybid = hid and cropid = cid;
return returndata;
END
$BODY$
LANGUAGE plpgsql
COST 100;
我调用此函数的方法如下,
public static object ExecuteScalar(string conString, string spName, NpgsqlParameter[] param)
{
using (var conn = new NpgsqlConnection(conString))
{
conn.Open();
using (var tran = conn.BeginTransaction())
using (var command = conn.CreateCommand())
{
command.CommandText = spName;
command.CommandType = CommandType.StoredProcedure;
for (var i = 0; i < param.Length; i++)
{
command.Parameters.Add(new NpgsqlParameter());
command.Parameters[i] = param[i];
}
var result = command.ExecuteScalar();
return result;
}
}
}
我尝试了所有内容,甚至使用
检查了pg_proc中是否存在此函数select * from pg_proc where proname = 'GetUserDailyData'
它反映了功能细节行。
但每次它都会出现同样的错误。
任何建议都将受到高度赞赏。感谢。
答案 0 :(得分:1)
在PostgreSQL中添加具有区分大小写的名称的对象可能会导致这些并发症;在这种情况下,您需要在引号之间指定存储过程的名称,但是建议不要创建依赖于区分大小写的任何对象,而是使用下划线,或者使用不带引号的CamelCase创建/引用对象时(它创建/引用低帽中的对象)。在任何情况下,您可能还需要将整个接口(而不仅仅是名称)指定为CommandText,并指定参数的数据类型(请参阅this)。
...
command.CommandText = "\"" + spName + "\"";
...