0

我用一个输入参数在 postgresql 中编写了一个函数。我想从 .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();
4

3 回答 3

0

要调用函数,请使用

select TestUGI('csnnutzer');

您不能在 PostgreSQL 中“只调用”一个函数。

于 2013-01-11T12:02:08.503 回答
0

去掉单引号:

NpgsqlCommand cmd = new NpgsqlCommand("TestUGI",conn);
...
cmd.Parameters.AddWithValue("@tablename", "csnnutzer");

在 ADO.Net 中,您必须传递参数类型:

cmd.Parameters.Add("@tablename", SqlDbType.VarChar, 16);

尝试找到如何做到这一点NpgSQL

于 2013-01-11T12:10:33.923 回答
0

请显示功能。那会有很大帮助。例如,如果函数返回一条记录,那么您是否应该进行不同类型的调用。

错误 42883 指出该函数未定义。这有一个直截了当的原因。如果您显示代码,我们可以帮助您找出答案。参数未知不是问题。当我读到它时,我知道有没有指定长度的文本或 varchar。

大小写是否正确?'testUGI' 和 'TestUgi' 的功能是不同的。

当函数没有返回记录时,您是否应该只进行查询。它不像 MySQL 中的存储过程,它有自己的语法(调用等)。在 postgresql 中调用一个函数是一个 select 语句。

一些例子:

select func();
select * from func();
select * from func() as (id int, name varchar);

第一个函数可以返回一个简单的数据类型,如整数或 varchar。当有一行表返回时的第二条语句。返回记录时的最后一个。

于 2013-01-16T21:58:33.087 回答