2016-07-06 86 views
0

我想執行一個Oracle函數,它返回一個遊標,但沒有任何工作。我已經嘗試了一些由一些stackoverflow帖子建議的解決方案。下面是我曾嘗試:使用C#執行Oracle函數

功能

FUNCTION market.get_countries_list RETURN REF CURSOR 
(
    COUNTRY_CODE NUMBER(3), 
    COUNTRY_NAME VARCHAR2(50) 
); 

C#代碼:

System.Data.OracleClient.OracleConnection conn = new System.Data.OracleClient.OracleConnection(); 
conn.ConnectionString = "..."; 
conn.Open(); 
System.Data.OracleClient.OracleCommand cmd = new System.Data.OracleClient.OracleCommand("MARKET.GET_COUNTRIES_LIST", conn); 
cmd.CommandType = System.Data.CommandType.Text; 
cmd.Parameters.Add(new System.Data.OracleClient.OracleParameter("ref_cur", System.Data.OracleClient.OracleType.Cursor)).Direction = System.Data.ParameterDirection.Output; 
System.Data.OracleClient.OracleDataReader rdr = cmd.ExecuteReader(); 
while (rdr.Read()) { 
    Label1.Text = rdr.GetOracleNumber(0).ToString(); 
    rdr.Close(); 
} 

以上代碼生成以下錯誤:

ORA-01036: illegal variable name/number 

我缺少什麼?

+1

看起來像你使用內置的.NET Framework數據提供程序的Oracle。我相信這是不贊成的。改爲使用ODP.NET庫。谷歌它,你會發現它。 – sstan

+1

用於oracle的.NET數據提供程序仍然不錯,我們目前使用'32Bit',因爲'64bit dll'有已知的錯誤 – MethodMan

+0

你看過Oracle文檔中關於如何創建一個返回'SYS_REFCURSOR'的函數是一個例子http://stackoverflow.com/questions/2153053/how-to-return-a-resultset-cursor-from-a-oracle-pl-sql-anonymous-block-that-exe – MethodMan

回答