我在postgresql中编写了一个带有一个inpute参数的函数。我想从.Net windows Form调用此函数,但是出现如下错误: 错误:42601:语法错误在»'TestUGI'« 这是我的代码:
Npgsql.NpgsqlConnection conn = new NpgsqlConnection("Server=127.0.0.1;Port=5432;Database=DB3;User Id=postgres;Password=123456;");
conn.Open();
NpgsqlCommand cmd = new NpgsqlCommand("'TestUGI'",conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@tablename", "'csnnutzer'");
cmd.ExecuteNonQuery();
答案 0 :(得分:0)
要调用函数,请使用
select TestUGI('csnnutzer');
你不能“只调用”PostgreSQL中的一个函数。
答案 1 :(得分:0)
单引号:
NpgsqlCommand cmd = new NpgsqlCommand("TestUGI",conn);
...
cmd.Parameters.AddWithValue("@tablename", "csnnutzer");
在ADO.Net中,您必须传递参数类型:
cmd.Parameters.Add("@tablename", SqlDbType.VarChar, 16);
尝试在NpgSQL
答案 2 :(得分:0)
请显示功能。这会有很大帮助。例如,如果函数返回一条记录,那么你应该进行另一种调用。
错误42883表明该函数未定义。这有一个直截了当的原因。如果您显示代码,我们可以帮助您查找。参数unknown不是问题。当我读到它时,我知道有没有指定长度的文本或varchar。
大写是否正确?函数'testUGI'和'TestUgi'是不同的。
当函数没有返回记录时,你应该只是进行查询。它不像MySQL中的存储过程,它有自己的语法(调用等)。在postgresql中调用一个函数是一个select语句。
一些例子:
select func();
select * from func();
select * from func() as (id int, name varchar);
第一个函数可以返回一个简单的数据类型,如integer或varchar。 返回时返回一行表的第二个语句。 返回记录时的最后一个。