2016-08-09 10 views
0

ORA-06550: строка 1, столбец 7: PLS-00306: неверное число или типы аргументов в вызове к 'UPDATEPHOTO'
ORA-06550: строка 1, столбец 7: PL/SQL: Заявление ignoredOracle.ManagedDataAccess.Client.OracleExceptionC#: Получение ошибки ORA-06550 при обновлении BLOB с помощью хранимой процедуры & ODP.NET

Я не знаю, что это неправильно или с процедурой, или мой код.

Вот моя хранимая процедура

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 Stored Procedure. –

+0

@marc_s Я попробовал, как вы предлагали, все еще возвращает ошибку. –

ответ

0

Заканчивать этот пост:

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

Я не могу точно сказать, что это ваша проблема, но на этот пост, если у вас есть BLOB-параметры в качестве параметров, вам нужно перечислить их f сначала в списке параметров, чтобы это работало. Я понятия не имею, почему, но в то время я пробовал это в обоих направлениях, и, конечно же, это сработало, когда BLOB был первым, и это не так, когда это было не так. Я знаю, это не имеет никакого смысла.

В качестве альтернативы, если вы установили для свойства BindByName вашего объекта OracleCommand значение true, это также должно работать. Я постараюсь, чтобы оба были уверены.

Одно предупреждение: сообщение, на которое я ссылаюсь, предназначен для функции вставки, а не хранимой процедуры, поэтому возможно, что есть разница.