2016-08-09 12 views
0

ORA-06550:行1、列7:PLS-00306:間違った番号または 'UPDATEPHOTO'
への呼び出しで の引数の型 ORA-06550:行1、列7:PL/SQL:ステートメント ignoredOracle.ManagedDataAccess.Client.OracleExceptionC#の:ストアドプロシージャ&ODP.NETを使用してBLOBを更新中にエラーORA-06550を取得

私はどちらかの手順や私のコードに問題があるのか​​分かりません。

ここに私のストアドプロシージャ

create or replace 
PROCEDURE UpdatePhoto 
(
    v_ac_photo_fileName IN VARCHAR2 DEFAULT NULL , 
    v_ac_photo_contentType IN VARCHAR2 DEFAULT NULL , 
    v_ac_photo_Data IN BLOB DEFAULT NULL , 
    v_ac_uniqueID IN VARCHAR2 DEFAULT NULL 
) 
AS 

BEGIN 
    UPDATE account_table 
     SET ac_photo_fileName = v_ac_photo_fileName, 
      ac_photo_contentType = v_ac_photo_contentType, 
      ac_photo_Data = v_ac_photo_Data 
     WHERE ac_uniqueID = v_ac_uniqueID; 
END; 

はここに私のC#のコードだだ:

public int UpdatePhoto(BO nBo) 
{ 
    OracleConnection ocon = new OracleConnection(orastr); 
    OracleCommand ocmd = new OracleCommand("UpdatePhoto", ocon); 
    ocmd.CommandType = CommandType.StoredProcedure; 

    ocon.Open(); 

    try 
    { 
     ocmd.Parameters.Add("ac_uniqueID", nBo.account_uniqueID);//String 
     ocmd.Parameters.Add("ac_photo_fileName", nBo.account_photo_fileName);//string 
     ocmd.Parameters.Add("ac_photo_contentType", nBo.account_photo_contentType);//string 
     ocmd.Parameters.Add("ac_photo_Data", nBo.account_photo_Data);// (Byte[] photo data)  

     // tried these also 
     ocmd.Parameters.Add("ac_uniqueID", OracleDbType.Varchar2, ParameterDirection.Input).Value = nBo.account_uniqueID; 
     ocmd.Parameters.Add("ac_photo_fileName", OracleDbType.Varchar2, ParameterDirection.Input).Value = nBo.account_photo_fileName; 
     ocmd.Parameters.Add("ac_photo_contentType", OracleDbType.Varchar2, ParameterDirection.Input).Value = nBo.account_photo_contentType; 
     ocmd.Parameters.Add("ac_photo_Data", OracleDbType.Blob, ParameterDirection.Input).Value = nBo.account_photo_Data; 

     return ocmd.ExecuteNonQuery(); 
    } 
    catch (Exception ex) 
    { 
     throw ex; 
    } 
    finally 
    { 
     ocon.Dispose(); 
     ocon.Close(); 
     nBo = null; 
    } 
} 
+1

Oracleストアドプロシージャの**パラメータ名**は 'v_ac_photo_fileName'、' v_ac_photo_contentType'などですが、C#コードでは全く異なる名前を使用します!!それらの名前は**一致しなければなりません**! –

+0

Oracleストアドプロシージャと同じ名前ではない他のフィールドを更新しているうちに、エラーが表示されませんでした。 –

+0

@marc_sあなたが示唆したように試みましたが、まだエラーを返します。 –

答えて

0

は、この記事をチェックアウト:

How to Update a BLOB column, error ORA-00932, while Insert works

を、私はこれは確かに言うことはできませんあなたの問題ですが、BLOBをパラメータとして使用している場合は、この投稿ごとにfこれが機能するためには、パラメータリスト内でirstを選択します。なぜか、私はそれを両方の方法で試してみましたが、BLOBが最初にあったときには十分に機能し、そうでないときにはうまくいきませんでした。私は知っている、それは意味をなさない。

また、OracleCommandオブジェクトのBindByNameプロパティをtrueに設定すると、これも機能するはずです。私は確信するために両方を試みるだろう。

注意:私が参照しているポストは、ストアドプロシージャではなく、挿入関数用であるため、違いがある可能性があります。

関連する問題