2013-01-11 41 views
0

我在postgresql中用一个inpute参数写了一个函数。我想要调用从.net Windows窗体这个功能,但一个错误occures这样的: 错误:42601:在的SyntaxError»‘TestUGI’« 这是我的代码:Npgsql错误42601

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

请出示功能。这会有很大的帮助。例如,如果该函数返回一条记录,那么你应该进行一种不同的调用。

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

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

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

一些例子:

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

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

0

要调用一个函数使用

select TestUGI('csnnutzer'); 

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

+0

但我想使用它.net – Kabi

+0

@Kabi:我相信.net可以运行一个'SELECT'语句。 –

+0

但我应该在哪里写? – Kabi

0

采取单引号了:

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

在ADO.Net你必须通过参数类型:

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

试图找到如何做到这一点的NpgSQL

+0

发生另一个错误,那不表示我的功能 – Kabi

+0

@Kabi什么是错误? '''csnnutzer'''还有另外一对单引号。还要拿出来。 –

+0

错误:42883:函数testugi(未知)不存在。 – Kabi

相关问题