执行 C#的服务器端程序调用Oracle的存储过程报错

错误类型:PLS-00306: 调用 'ZXF_JS' 时参数个数或类型错误
ORA-06550: 第 1 行, 第 7 列:
PL/SQL: Statement ignored

存储过程定义:
CREATE OR REPLACE procedure NQ.zxf_js
(
v_ddrq date,
v_sdrq date,
v_xx varchar2,
v_fhdw varchar2,
v_fromport varchar2,
v_toport varchar2,
v_zxf out int
)
is 。。。。

C#调用语句:
public string SpExeFor(DateTime m_A, DateTime m_B,string m_C,string m_D,string m_E,string m_F,int m_J)
{
//存储过程的参数声明
OracleParameter[] parameters ={
new OracleParameter("paramin",OracleType.DateTime ,20),
new OracleParameter("paramin",OracleType.DateTime,20),
new OracleParameter("paramin",OracleType.VarChar,20),
new OracleParameter("paramin",OracleType.VarChar ,20),
new OracleParameter("paramin",OracleType.VarChar,20),
new OracleParameter("paramin",OracleType.VarChar,20),
new OracleParameter("paramout",OracleType.Int16 ,10)
};
parameters[0].Value = m_A;
parameters[1].Value = m_B;
parameters[2].Value = m_C;
parameters[3].Value = m_D;
parameters[4].Value = m_E;
parameters[5].Value = m_F;
// parameters[6].Value = m_J;

parameters[0].Direction = ParameterDirection.Input;
parameters[1].Direction = ParameterDirection.Input;
parameters[2].Direction = ParameterDirection.Input;
parameters[3].Direction = ParameterDirection.Input;
parameters[4].Direction = ParameterDirection.Input;
parameters[5].Direction = ParameterDirection.Input;
parameters[6].Direction = ParameterDirection.Output;
// parameters[2].Direction = ParameterDirection.InputOutput;
try
{
RunProcedure("zxf_js", parameters);
return parameters[6].Value.ToString();
}
catch (Exception e)
{
throw e;
}
}

麻烦帮助解决,非常感谢了!

public string SpExeFor(DateTime m_A, DateTime m_B,string m_C,string m_D,string m_E,string m_F,int m_J)
{
//存储过程的参数声明
OracleParameter[] parameters ={
new OracleParameter("v_ddrq",OracleType.DateTime),
new OracleParameter("v_sdrq",OracleType.DateTime),
new OracleParameter("v_xx",OracleType.VarChar,20),
new OracleParameter(" v_fhdw",OracleType.VarChar ,20),
new OracleParameter("v_fromport",OracleType.VarChar,20),
new OracleParameter("v_toport",OracleType.VarChar,20),
new OracleParameter("v_zxf",OracleType.Int16)
};
parameters[0].Value = m_A;
parameters[1].Value = m_B;
parameters[2].Value = m_C;
parameters[3].Value = m_D;
parameters[4].Value = m_E;
parameters[5].Value = m_F;
parameters[6].Direction = ParameterDirection.Output;
try
{
RunProcedure("zxf_js", parameters);
return parameters[6].Value.ToString();
}
catch (Exception e)
{
throw e;
}
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-04-01
错误类型:PLS-00306: 调用 'ZXF_JS' 时参数个数或类型错误

提示已经很清楚了,你的参数能错了.、
debug 看看吧!追问

调试没看出来问题,看到赋值也是对的,输入7个参数,存储过程也是7个参数,不知道类型是否匹配,麻烦帮我检查C#设定的参数和存储过程定义的参数是否匹配,请提建议啊,多谢。

C# 调用oracle 存储过程 报错PLS-00306: wrong number or types o...
create or replace procedure abc.bcd(t1 in varchar2,t2 in number,t3 out varchar2 ,t4 out number,t5 out number , t6out number ,t7 out number )\/* 这部分要注释掉,你的参数是传入的,这里不能重复申明 declare t3 varchar2(20);t4 number;t5 number;t6 number;t7 number;\/ begin...

为什么Oracle存储过程建成功了,执行存储过程却报错
你的存储过程应该是编译报错,虽然创建了但是编译有错误。改了下你的程序:create or replace procedure edpsc2exe7(V_col in number,V_play out varchar2)IS begin case V_col when 1 then V_play := 'a';when 2 then V_play := 'b';else V_play := 'c';end case;dbms_output.p...

求解C#调用ORACLE存储过程的问题,出现错误 ora-06550好像是参数类型和参...
原来是在.net中,ms为oracle提供的oledb接口有问题,换成oracle自己的就没有问题了 ?? 找来的答案

C# 调用oracle过程时 出现 ORA-01008:并非所有变量都已绑定
你只写存储过程名字,后面不要括号和参数名

ORACLE 存储过程报错 PLS-00103 求查错
其中username ,counter ,rolename 是传入参数,传入参数不能赋值,即第7、8行语句有问题,建议删除。建议在plsql工具中编辑,方便。

Oracle 定义存储过程 不能执行,处于无效状态。
无效状态有两种可能,一种是你的存储过程编辑没有成功,创建了,但里面有语法错误。还有一种是存储过程使用的表有结构上的改变,需要重新编译一下。你重新编译一下,如果不成功,就是有语法问题,你需要修改存储过程。 本回答由提问者推荐 举报| 答案纠错 | 评论(1) 11 5 ...

c#调用oracle存储过程,返回2个值
cmd.CommandType = CommandType.StoredProcedure;\/\/将输出参数添加到result对象中 foreach(OracleParameter op in OPCParam){ if(ParameterDirection.Output == op.Direction){ result.Add(op);} cmd.Parameters.Add(op);} cmd.CommandText = ProcedureName;cmd.ExecuteNonQuery();for(int i = 0; i <...

c# 调用Oracle存储过程 PLS-00201:必须声明标识符
调用过程没有错误。你确认system用户中,有PROC_Interface_A的存储过程吗?当前登录的用户,有system.PROC_Interface_A的执行权限吗?

C#调用 ORACLE 存储过程时 字符类型的返回值出现乱码
存储过程中定义的变量要用N'@string'这形式才不会乱码

java调用oracle存储过程无法获得正确的返回值,每次都是0
你通过JDBC这种方式调用存储过程,应该使用 CallableStatement 类, CallableStatement cs=conn.prepareCall(str);补充一句,避免你在执行有错,cs.excuse();这个方法为执行,然后在获取输出参数。另外写输出参数的类型时,直Types.类型即可,不用带包。

相似回答
大家正在搜