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;
}
}
查看此帖子:
如何在Insert工作时更新BLOB列,错误ORA-00932
我不能肯定这是你的问题,但根据这篇文章,如果你有BLOB作为参数,你需要在参数列表中首先列出它们才能工作。我不知道为什么,但当时我尝试了两种方法,果不其然,当BLOB出现时,它起了作用,而当它不起作用时,它没有起作用。我知道,这毫无意义。
或者,如果将OracleCommand
对象的BindByName
属性设置为true,这也应该有效。我会两种都试着确定。
有一点需要注意:我引用的帖子是针对插入函数的,而不是存储过程,所以可能存在差异。