Npgsql错误42601

时间:2013-01-11 11:48:03

标签: postgresql plpgsql npgsql

我在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();

3 个答案:

答案 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。 返回时返回一行表的第二个语句。 返回记录时的最后一个。