I'm trying to use stored function from Oracle Express database i开发者_JS百科n 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();
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.
Your function accepts no parameters - try this:
SELECT SILNIA FROM DUAL
精彩评论