2013-06-03 54 views
2

错误的参数或参数类型我已经成功创建了一个包。 但是,当我试图把这个在我的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); 
+0

的错误是明显的,你可以分享你的代码? – Mzf

+1

我不知道你是如何在你的C#代码中传递sys_refcursor类型的。错误必须在那里。 – hol

+0

那么我应该如何传递类型sys_refcursor呢?我编辑了我的文章并分享了一些代码。 – QKWS

回答

1

我发现有什么错我的代码..

嘘乌尔德改变这一行:

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

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

应该使用游标,而不是为varchar ..