我试图从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