2013-01-11 61 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

相關問題