Using SQL stored function gives invalid SQL statem

2019-07-17 16:52发布

I'm trying to use stored function from Oracle Express database in c# application.

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

where SILNIA function (compiles without errors) is defined:

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;

On line:

com.ExecuteNonQuery();

i get

ERROR [42000] [Microsoft][ODBC driver for Oracle][Oracle]ORA-00900: invalid SQL statement.

But this works works without any problems:

OdbcCommand sqlCom = new OdbcCommand("SELECT SILNIA() FROM DUAL", sqlConn);
label1.Content = sqlCom.ExecuteScalar().ToString();

2条回答
爷的心禁止访问
2楼-- · 2019-07-17 17:14

You can't use ExecuteNonQuery() to run a SP. You have to do something else -- ExecuteScalar or ExecuteReader

This is because ExecuteNonQuery() is designed to only work with UPDATE, INSERT, and DELETE statements.

查看更多
混吃等死
3楼-- · 2019-07-17 17:26

Your function accepts no parameters - try this:

SELECT SILNIA FROM DUAL
查看更多
登录 后发表回答