C#调用ORACLE包中的存储过程报错

xjl1314521wxw 2012-07-11 12:31:36
过程定议:
PROCEDURE P_LOGI(iv_userid IN VARCHAR,iv_password IN VARCHAR,
ov_username OUT VARCHAR,ov_role OUT VARCHAR)
IS
r_zy JC_ZHIYDOC%ROWTYPE;
BEGIN
BEGIN
SELECT * INTO r_zy
FROM JC_ZHIYDOC
WHERE ZHIY_NO=Upper(iv_userid);
EXCEPTION WHEN OTHERS THEN
PRC_UTL_RAISE(-20011,'WXW.P_LOGI','HDL001','@USER='||iv_userid||';');
END;

IF r_zy.PWD IS NULL THEN
PRC_UTL_RAISE(-20011,'WXW.P_LOGI','HDL003','');
END IF;

/* \* IF Upper(iv_password)<>F_DECRYPT_DATA(r_zy.PWD) THEN
PRC_UTL_RAISE(-20011,'PKG_UTL_LOGIN.P_LOGIN','HDL002','');*\
END IF;*/

ov_username := r_zy.ZHIY_NAME;
ov_role := r_zy.JIAOS_ID;
END P_LOGI;


C#前台调用:
private void button1_Click(object sender, EventArgs e)
{
//声明变量
string iv_userid = "";
string iv_password = "";
string ov_username = "";
string ov_role = "";

OracleConnection ORCNET = new OracleConnection("data source=lmis6;user id=Lmis;password=lmis6xj");
OracleCommand cmd = new OracleCommand("WXW.P_LOGI", ORCNET);
cmd.CommandType = CommandType.StoredProcedure;
OracleParameter[] parm = new OracleParameter[4];
//in
parm[0] = new OracleParameter(@iv_userid, OracleType.VarChar, 10);
parm[1] = new OracleParameter(@iv_password, OracleType.VarChar, 32);
//out
parm[2] = new OracleParameter(@ov_username, OracleType.VarChar, 50);
parm[3] = new OracleParameter(@ov_role, OracleType.VarChar, 50);
//设置参数输入输出类型
parm[0].Direction=ParameterDirection.Input;
parm[1].Direction=ParameterDirection.Input;
parm[2].Direction=ParameterDirection.Output;
parm[3].Direction=ParameterDirection.Output;
//设置参数值类型
parm[0].DbType = DbType.String;
parm[1].DbType = DbType.String;
parm[2].DbType = DbType.String;
parm[3].DbType = DbType.String;
//给参数赋值
parm[0].Value = name.Text;
parm[1].Value = pwd.Text;
parm[2].Value = null;
parm[3].Value = null;
if (name.Text.Trim() == "" || pwd.Text.Trim() == "")
{
MessageBox.Show("用户名或密码不能为空!");
}
cmd.Parameters.Add(parm[0]);
cmd.Parameters.Add(parm[1]);
cmd.Parameters.Add(parm[2]);
cmd.Parameters.Add(parm[3]);
try
{
ORCNET.Open();
cmd.ExecuteNonQuery();
MessageBox.Show("成功连接ORACLE数据库");
//ORCNET.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
finally
{

}
}
...全文
90 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
xjl1314521wxw 2012-08-23
  • 打赏
  • 举报
回复
找到原因了,原来C#在调用ORACLE 过程时要参数名和类型必须和ORACLE完全一样才行
言多必失 2012-07-14
  • 打赏
  • 举报
回复
注意对应参数的类型。
maji_lulu 2012-07-11
  • 打赏
  • 举报
回复
报什么错啊啊

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧