2016-10-17 7 views
-1

編集:私はここのスレッドを洗い上げてきたと私は受け付けており、なぜ私が把握することはできませんポスト#2C# - ORA-06550:間違った番号または呼び出しの引数のタイプの「DOPROCESS」に

を参照してください。 ORA-06550メッセージ。

エラーのないOracleのPL/SQLプロセス。

保存されたPROCは5つのパラメータを受け取り、例外処理のために1つのNUMBERパラメータを出力しようとしています。

私が間違っていることを教えてください。あなたは、ADO.NETでのOUTPUTパラメータに既存の変数を使用することはできません

PL/SQL

PROCEDURE DoProcess(ocn IN WAREHOUSE.BANK_STATEMENT_ACTIVITY.CHECK_NO%TYPE, 
        oca IN WAREHOUSE.BANK_STATEMENT_ACTIVITY.AMOUNT%TYPE, 
        ecn IN WAREHOUSE.BANK_STATEMENT_ACTIVITY.CHECK_NO%TYPE, 
        eca IN WAREHOUSE.BANK_STATEMENT_ACTIVITY.AMOUNT%TYPE, 
        usr IN WAREHOUSE.BANK_STATEMENT_ACTIVITY.OVERRIDDEN_USER_ID%TYPE, 
        errCode OUT NUMBER) 
AS 
BEGIN 
    Initialize(ocn, oca, ecn, eca, usr); 
    DBMS_OUTPUT.PUT_LINE('ocn: ' || ocn || CHR(10) || 
         'oca: ' || oca || CHR(10) || 
         'ecn: ' || ecn || CHR(10) || 
         'eca: ' || eca || CHR(10) || 
         'usr: ' || usr); 
    IF IsValid(bsa_rec.CHECK_NO, errCode) THEN UpdateProc; 
    --DBMS_OUTPUT.PUT_LINE('errCode: ' || errCode); 
    END IF; 
END DoProcess; 

C#

public Int32 BankDataExceptionsDoProcess(string ckNo, string ckAmt, string checkNo, string checkAmt, string user) 
    { 
     Int32 errCode = 0; 

     ckNo = ckNo.Trim(); 
     double dblCkAmt = double.Parse(ckAmt.Trim()); 
     checkNo = checkNo.Trim(); 
     double dblCheckAmt = double.Parse(checkAmt.Trim()); 
     int uid = int.Parse(user); 


     object obj = null; 

     if (DBC == null) 
      DBC = new DBConn(); 

     DBC.ExecutePackage(Vars.pkgBankDataExceptions, 
          out obj, 
          new ParameterDirection[] { ParameterDirection.Input, 
                 ParameterDirection.Input, 
                 ParameterDirection.Input, 
                 ParameterDirection.Input, 
                 ParameterDirection.Input, 
                 ParameterDirection.Output }, 
          new object[] { ckNo, dblCkAmt, checkNo, dblCheckAmt, uid, errCode } 
         ); 

     return errCode; 
    } 

答えて

0

cmd.Parameters.Add("OutputParam", OracleDbType.Int32).Direction = ParameterDirection.Output; 

次に実行した後にそれを参照:

if(cmd.Parameters["OutputParam"] != null) 
{ 
    int returnValue = int.Parse(cmd.Parameters["OutputParam"].Value); 
} 
+0

おかげチャック、私はそれを考え出すことになった、あなたは何を意味するか参照してください。私はこの投稿が遅いことを知っていますが、私はいくつかの古い投稿を見直していましたが、これはupvoteに値するものです。再度、感謝します! – TheSchnitz

0

私はコードの小さなPICEがありませんでした。デフォルトのoutオブジェクトには、oracleデータ型に関係なくすべての文字列が含まれているようです。ここで

は、コードの欠落しているPICEです:

errCode = int.Parse(obj.ToString()); 

全体C#の方法:

public int BankStmntExceptionsDoProcess(string ckNo, string ckAmt, string checkNo, string checkAmt, string user) 
    { 
     int errCode = 0;; 

     ckNo  = ckNo.Trim(); 
     ckAmt = ckAmt.Trim(); 
     checkNo = checkNo.Trim(); 
     checkAmt = checkAmt.Trim(); 
     user  = user.Trim(); 

     object obj = null; 

     if (DBC == null) 
      DBC = new DBConn(); 

     DBC.ExecutePackage(Vars.pkgBankStatementProcessing, 
          out obj, 
          new ParameterDirection[] { ParameterDirection.Input, 
                 ParameterDirection.Input, 
                 ParameterDirection.Input, 
                 ParameterDirection.Input, 
                 ParameterDirection.Input, 
                 ParameterDirection.Output, 
                }, 
          new object[] { ckNo, ckAmt, checkNo, checkAmt, user, errCode } 
          ); 

     errCode = int.Parse(obj.ToString()); 

     return errCode; 
    } 
関連する問題