0

ORA-06550:第 1 行,第 7 列:PLS-00306:调用“UPDATEPHOTO”时参数的数量或类型错误
ORA-06550:第 1 行,第 7 列:PL/SQL:语句被忽略Oracle.ManagedDataAccess.Client.OracleException

我不知道程序或我的代码有什么问题。

这是我的存储过程

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;
    }
}
4

1 回答 1

0

看看这篇文章:

如何更新 BLOB 列,错误 ORA-00932,而插入工作

我不能肯定这是你的问题,但是根据这篇文章,如果你有 BLOB 作为参数,你需要首先在参数列表中列出它们才能工作。我不知道为什么,但当时我尝试了两种方式,果然当 BLOB 第一个时它起作用了,而当它不是时它没有。我知道,这没有任何意义。

或者,如果您将对象的BindByName属性设置OracleCommand为 true,这也应该有效。我会尝试两者来确定。

一个警告:我引用的帖子是针对插入函数的,而不是存储过程,因此可能存在差异。

于 2016-08-12T03:45:12.257 回答