c 调用oracle包体,C#调用ORACLE包中的存储过程报错,该如何解决

当前位置:我的异常网» C# » C#调用ORACLE包中的存储过程报错,该如何解决

C#调用ORACLE包中的存储过程报错,该如何解决

www.myexceptions.net  网友分享于:2013-03-27  浏览:21次

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

过程定议:

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

{

}

}

------解决方案--------------------

注意对应参数的类型。

我的异常网推荐解决方案:oracle存储过程,http://www.myexceptions.net/oracle-develop/177537.html

文章评论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C#调用 Oracle 存储过程可以使用 Oracle.DataAccess.Client 命名空间中的 OracleCommand 类。下面是一个示例代码: ```csharp // 创建 Oracle 数据库连接 OracleConnection connection = new OracleConnection("Data Source=your_datasource;User ID=your_userid;Password=your_password"); // 打开数据库连接 connection.Open(); // 创建 OracleCommand 对象,设置存储过程名称和连接对象 OracleCommand command = new OracleCommand("your_stored_procedure_name", connection); command.CommandType = CommandType.StoredProcedure; // 添加输入参数 OracleParameter inputParameter = new OracleParameter("input_parameter_name", OracleDbType.Varchar2, ParameterDirection.Input); inputParameter.Value = "your_input_parameter_value"; command.Parameters.Add(inputParameter); // 添加输出参数 OracleParameter outputParameter = new OracleParameter("output_parameter_name", OracleDbType.Varchar2, ParameterDirection.Output); command.Parameters.Add(outputParameter); // 执行存储过程 command.ExecuteNonQuery(); // 获取输出参数值 string outputValue = outputParameter.Value.ToString(); // 关闭数据库连接 connection.Close(); ``` 其中,your_datasource 是你的 Oracle 数据库连接字符串,your_userid 和 your_password 是你的数据库用户名和密码,your_stored_procedure_name 是你要调用存储过程名称,input_parameter_name 是存储过程的输入参数名称,output_parameter_name 是存储过程的输出参数名称。执行存储过程后,可以通过 outputParameter.Value 属性获取输出参数的值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值