失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > c# 调用oracle存储过程(参数类型不对)排坑之BindByName参数

c# 调用oracle存储过程(参数类型不对)排坑之BindByName参数

时间:2022-12-24 20:07:46

相关推荐

c# 调用oracle存储过程(参数类型不对)排坑之BindByName参数

介绍:Oracle.ManagedDataAccess.dll

c# ado调用oracle存储过程报错(参数类型不对、顺序不对等等问题),只需要加上BindByName=true即可,使用微软自带的System.Data.OracleClient.dll,应该是没有问题(没亲测)。

准备oracle存储过程

创建一个简单的存储过程,向sys_user表中插入一条数据

create or replace procedure proTest(id in varchar2,spassword in varchar2,smobilephone in varchar2,semail in varchar2,returnValue out varchar2)asbeginbegininsert into sys_user(guid,password,mobilephone,createtime, email) values(id,spassword,smobilephone,(SELECT SYSDATE FROM dual),semail);returnValue:='成功';exceptionWHEN OTHERS THENreturnValue:='失败';end;end;

c#操作调用存储过程:

1.首先我将BindByName设置为默认值false,参数顺序按照存储过程的入参顺序(id,spassword,smobilephone,semail,returnValue)来传参,可以成功

using (IDbConnection db = DapperFactory.GetConnection(Enums.MyDbType.Oracle, @"User ID=czj;Password=123456;Data Source=(DESCRIPTION = (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = orcl)))")){db.Open();var command=(OracleCommand)db.CreateCommand();command.BindByName = false;//根据参数名绑定,默认为falsestring returnValue = "";List<OracleParameter> paraList = new List<OracleParameter>{new OracleParameter("id", OracleDbType.Varchar2, Guid.NewGuid().ToString(), ParameterDirection.Input),new OracleParameter("spassword", OracleDbType.Varchar2, "123456", ParameterDirection.Input),new OracleParameter("smobilephone", OracleDbType.Varchar2, "15298506403", ParameterDirection.Input),new OracleParameter("semail", OracleDbType.Varchar2, "15298506403@", ParameterDirection.Input),new OracleParameter("returnValue", OracleDbType.Varchar2, 1000,returnValue,ParameterDirection.Output)};mandText = "proTest1";mandType = CommandType.StoredProcedure;command.Parameters.AddRange(paraList.ToArray());var effectRows=command.ExecuteScalar();}

2.现在我改变入参顺序,改成(spassword,id,smobilephone,semail,returnValue),发现不会成功,这时BindByName设置为true便可

List<OracleParameter> paraList = new List<OracleParameter>{new OracleParameter("spassword", OracleDbType.Varchar2, "123456", ParameterDirection.Input),new OracleParameter("id", OracleDbType.Varchar2, Guid.NewGuid().ToString(), ParameterDirection.Input),new OracleParameter("smobilephone", OracleDbType.Varchar2, "15298506403", ParameterDirection.Input),new OracleParameter("semail", OracleDbType.Varchar2, "15298506403@", ParameterDirection.Input),new OracleParameter("returnValue", OracleDbType.Varchar2, 1000,returnValue,ParameterDirection.Output)};

如果觉得《c# 调用oracle存储过程(参数类型不对)排坑之BindByName参数》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。