我試圖從C#應用程序中的Oracle Express數據庫使用存儲的功能。使用SQL存儲函數給出了無效的SQL語句
OdbcCommand com = new OdbcCommand("SILNIA",sqlConn);
com.CommandType = CommandType.StoredProcedure;
OdbcParameter sqlParam = new OdbcParameter("@ReturnValue", OdbcType.Int);
sqlParam.Direction = ParameterDirection.ReturnValue;
com.Parameters.Add(sqlParam);
com.ExecuteNonQuery();
label1.Content = com.Parameters["@ReturnValue"].Value.ToString();
其中SILNIA功能(編譯沒有錯誤)的定義是:
create or replace
FUNCTION SILNIA RETURN NUMBER IS
w NUMBER := 1;
BEGIN
for i in 1..5 loop
w:=w*i;
end loop;
RETURN w;
END SILNIA;
在線:
com.ExecuteNonQuery();
我得到
ERROR [42000] [Microsoft][ODBC driver for Oracle][Oracle]ORA-00900: invalid SQL statement.
但是這部作品的作品沒有任何問題:
OdbcCommand sqlCom = new OdbcCommand("SELECT SILNIA() FROM DUAL", sqlConn);
label1.Content = sqlCom.ExecuteScalar().ToString();
我都試過OdbcDataReader R = com.ExecuteReader();和label1.Content =(string)com.ExecuteScalar();而不是com.ExecuteNonQuery();併發生相同的錯誤。 – mmatloka 2010-11-13 22:21:30
你確定你不能爲SP運行ExecuteNonQuery()?我相當有信心你可以稱之爲... – mint 2010-11-16 20:10:35