网站开发设计师,网站建设数据处理,网页界面设计教材,西宁市建设局网站题记#xff1a;需求如题#xff0c;在网上搜索了一下#xff0c;没有特别贴合我需求的资料#xff0c;只好自己摸索#xff0c;东拼西凑了解了一点东西慢慢尝试做了出来。难点#xff1a;.NET是微软产品#xff0c;主要支持Sql Server数据库#xff0c;对于Oracle的数…题记需求如题在网上搜索了一下没有特别贴合我需求的资料只好自己摸索东拼西凑了解了一点东西慢慢尝试做了出来。难点.NET是微软产品主要支持Sql Server数据库对于Oracle的数据库的资料比较少。思路EF框架是DataBase First 先在数据库创建存储过程并测试能够执行。在系统中通过调用SqlQuery方法来执行存储过程。【EF的SqlQuery使用教程】封装一个执行存储过程的方法#region 调用存储过程返回一个指定的TResultpublic List RunProc(string sql, params object[] pamrs){return db.Database.SqlQuery(sql, pamrs).ToList();}#endregion参数sql为执行存储过程的sql语句在oracle数据库中为begin 存储过程名称(参数1参数2……);end;参数pamrs为Oracle.ManagedDataAccess.Client.OracleParameter类型的数组【OracleParameter的教程】需要引用的dll为Oracle.ManagedDataAccess.dll可以通过NuGet包添加。最后根据输出参数的值判断是否成功调用存储过程。PS可以用try catch来捕获异常并输出代码public ResultModelProExecute(){try{//参数数列List parameters new List();//输入参数parameters.Add(new OracleParameter(exeno, DateTime.Now.ToString(yyyyMMddHHmmss)));parameters.Add(new OracleParameter(exetype, 手动));//输出参数var para_exeid new OracleParameter(exeid, OracleDbType.Int32);para_exeid.DirectionSystem.Data.ParameterDirection.Output;parameters.Add(para_exeid);//执行存储过程var list RunProc(begin pro_charges_execute(:exeno,:exetype,:exeid);end;, parameters.ToArray());//获取输出参数的值var rowid Convert.ToInt32(parameters[2].Value.ToString());if (rowid 0){return new ResultModel() { errcode 0, errmsg Lang.Filed_Common_OperSuccess };}else{return new ResultModel() { errcode 1, errmsg Lang.ErrMsg_Common_OperationFailed };}}catch(Exception ex){return new ResultModel() { errcode 1, errmsg ex.Message };}}要点一开始调用语句为RunProc()返回报错数据读取器具有多个字段。多个字段对于存储过程中的EDM原语或枚举类型无效(数据读取器具有多个字段。多个字段对于EDM原语或存储过程中的枚举类型无效)这是由于int为值类型不与存储过程的返回的模型匹配。重新建立了一个ViewModel作为返回类型。public classCharges_ExelogParameter{public string exetype { get; set; }public string exeno { get; set; }public int exeid { get; set; }}附记顺便列出不是用EF框架时.NET调用存储过程的方法。这次使用的是DBHelperOra帮助类同时也要引用Oracle.ManagedDataAccess.dll。下面是DBHelperOra里我们需要用到的方法。public static void RunProcedureNoReturn(stringstoredProcName, IDataParameter[] parameters){using (OracleConnection connection newOracleConnection(connectionString)){connection.Open();OracleCommand commandBuildQueryCommand(connection, storedProcName, parameters);command.ExecuteNonQuery();connection.Close();}}逻辑类似声明参数变量后直接调用RunProcedureNoReturn去执行存储过程。public int UpdateTagMember(int tagid,stringuserid){IDataParameter[] para new IDataParameter[2];para[0] new OracleParameter(USERID, userid);para[1] new OracleParameter(TAGID, OracleDbType.Int32, tagid,ParameterDirection.InputOutput);DBHelperOra.RunProcedureNoReturn(PRO_TAGMEMBER_UPDATE, para);return para[1].Value.ObjToInt();}参考https://www.cnblogs.com/lizichao1991/p/6867331.html