2

C#アプリケーションでOracleExpressデータベースのストアド関数を使用しようとしています。

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

2 に答える 2

1

ExecuteNonQuery() を使用して SP を実行することはできません。何か他のことをしなければなりません - ExecuteScalar または ExecuteReader

これは、ExecuteNonQuery() が UPDATE、INSERT、および DELETE ステートメントでのみ機能するように設計されているためです。

于 2010-11-13T22:11:38.140 に答える
0

関数はパラメーターを受け入れません-これを試してください:

SELECT SILNIA FROM DUAL
于 2010-11-14T08:08:34.450 に答える