我正在尝试在c#应用程序中使用Oracle Express数据库中的存储功能。

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();

最佳答案

您不能使用ExecuteNonQuery()运行SP。您还必须做其他事情-ExecuteScalar或ExecuteReader

这是因为ExecuteNonQuery()仅设计用于UPDATE,INSERT和DELETE语句。

关于c# - 使用SQL存储函数给出无效的SQL语句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4174968/

10-11 03:39