原代碼部分:
存儲過程:
procedure ChangeWorkTask(p_pt_id int,
p_pt_pid int,
p_pt_name varchar2,
p_pt_planstart date,
p_pt_planend date,
p_pt_realstart date,
p_pt_realend date,
p_pt_remark varchar2,
ResultValue out number) as
界面上調用的部分:
public bool ChangeWorkTask(int id, int pid, string name, DateTime planstart, DateTime planend, DateTime realstart, DateTime realend, string remark)
{
OracleParameter[] param = {
new OracleParameter("p_pt_id",OracleType.Number),
new OracleParameter("p_pt_pid",OracleType.Number),
new OracleParameter("p_pt_name",OracleType.VarChar,200),
new OracleParameter("p_pt_planstart",OracleType.DateTime),
new OracleParameter("p_pt_planend",OracleType.DateTime),
new OracleParameter("p_pt_realstart",OracleType.DateTime),
new OracleParameter("p_pt_realend",OracleType.DateTime),
new OracleParameter("p_pt_remark",OracleType.VarChar,4000),
new OracleParameter("p_pt_actualmanday",OracleType.Number),
new OracleParameter("p_pt_company",OracleType.VarChar,200),
new OracleParameter("p_pt_product",OracleType.VarChar,200),
new OracleParameter("ResultValue",OracleType.Number,4,ParameterDirection.Output,string.Empty,DataRowVersion.Default,true,null)
};
int rowEffect;
param[0].Value = id;
param[1].Value = pid;
param[2].Value = name;
param[3].Value = planstart;
param[4].Value = planend;
param[5].Value = realstart;
param[6].Value = realend;
param[7].Value = remark;
param[8].Value = actualmanday;
param[9].Value = company;
param[10].Value = product;
int result= DbHelperOra.RunProcedure("PRJ_PersonalLogTask_PKG.ChangeWorkTask", param,out rowEffect);
if (result == 1)
{
return true;
}
else
{
return false;
}
}
就是在調用存儲過程的時候,即
int result= DbHelperOra.RunProcedure("PRJ_PersonalLogTask_PKG.ChangeWorkTask", param,out rowEffect); 報錯
錯誤如下:
ORA-06550: 第 1 行, 第 23 列:
PLS-00222: 在此範圍中不存在名為 ‘PRJ_PersonalLogTask_PKG.ChangeWorkTask' 的函數
ORA-06550: 第 1 行, 第 7 列:
PL/SQL: Statement ignored
但是,在資料庫中,可以找到此包,也能找到此存儲過程。且資料庫的連接配接也是正常的。
我在網上查了半天,也沒有找到解決方案,隻看到一篇文章遇到這樣的問題。但沒看懂解決方法。
http://blog.csdn.net/changnan85/article/details/1798722
後來,我感覺好像是輸入輸出參數那個部分,我好像沒弄清楚。
現解決了,把解決方案記下來。
對于存儲過程中,含有輸出類型的參數,如: ResultValue out number 時,在界面上 傳參時,不能用 int result= DbHelperOra.RunProcedure("PRJ_PersonalLogTask_PKG.ChangeWorkTask", param,out rowEffect); 這種形式 要修改成:
DbHelperOra.RunProcedure("PRJ_PersonalLogTask_PKG.ChangeWorkTask", param);
decimal result = Convert.ToDecimal(param[11].Value);
if (result == 1)
{
return true;
}
else
{
return false;
}
即可!