3

パッケージの作成に成功しました。しかし、C# プログラムでこれを呼び出そうとすると、エラーが発生します: LOG_STATUS の呼び出しで引数の数または型が間違っています

LOG_STATUS はプロシージャの名前です。

CREATE OR REPLACE PACKAGE BODY ITMON.SERVERSTATUS AS  
PROCEDURE LOG_STATUS(out_RESULT OUT sys_refcursor)   
IS 
BEGIN
OPEN out_RESULT FOR
    SELECT HOSTNAME, USERS, PS_NAME 
    FROM PS_COLLECT
    WHERE NOT EXISTS
( 
        SELECT HOSTNAME, USERS, PS_NAME
        FROM PS_MASTER
        WHERE PS_MASTER.HOSTNAME = PS_COLLECT.HOSTNAME 
        AND PS_MASTER.USERS = PS_COLLECT.USERS 
        AND PS_MASTER.PS_NAME = PS_COLLECT.PS_NAME
    );
 END LOG_STATUS;  
END;

ここに私のC#コードがあります:

            OracleCommand OCom = new OracleCommand("SERVERSTATUS.LOG_STATUS", oc);
            OCom.CommandType = CommandType.StoredProcedure;

            OCom.Parameters.Add("out_RESULT", OracleType.VarChar, 30000).Direction = ParameterDirection.Output;

            OCom.Parameters[0].Value = sid;

            OracleDataAdapter _daGrid1 = new OracleDataAdapter(OCom);

            _daGrid1.Fill(_dsGrid);
4

1 に答える 1

1

コードの何が問題なのかがわかりました..

この行を変更する必要があります:

OCom.Parameters.Add("out_RESULT", OracleType.VarChar, 30000).Direction = ParameterDirection.Output;

OCom.Parameters.Add("out_RESULT", OracleType.Cursor).Direction = ParameterDirection.Output;

varchar の代わりに Cursor を使用する必要があります。

于 2013-06-04T03:30:08.603 に答える