用到的几个调用存储过程例子

博客展示了两段数据库操作代码。一段是使用 OmTransactionManager 执行存储过程,通过 OleDbDataReader 读取数据并赋值给实体对象;另一段是定义 EXECORASQL 方法,连接 Oracle 数据库,执行存储过程并获取输出参数结果。

   OmTransactionManager.SetConnectionAndTransaction(myCMD);
   myCMD.CommandText  ="{call curspkg_join.open_join_cursor1(?, {resultset 0, io_cursor})}";
   myCMD.Parameters.Add("ID", OleDbType.Numeric, 4).Value = 0;
   OleDbDataReader myReader;
   myReader = myCMD.ExecuteReader();
   int x;
   int i=0;

   while (myReader.Read())
    
   {
    for (x = 0; x <= myReader.FieldCount - 1; x++)
    {
     scEntity[i] =new GCEEDAT00SCIRAIEntity ();
     scEntity[i].MiseName =myReader.GetValue (x++).ToString ();
     scEntity[i].MiseCode =myReader.GetValue (x++).ToString ();
     scEntity[i].MinCount =myReader.GetValue (x++).ToString ();
     scEntity[i].Success =myReader.GetValue (x++).ToString ();

    }
    i++;
    
   }


   myReader.Close();


  public int EXECORASQL(GCEEDAT00CSData argCSData)
  {
   string constring="Data Source='SE';User ID='mhs';Password='mhs'";
   OracleConnection con=new OracleConnection (constring);
   con.Open ();
   oraexecsql=new OracleCommand ("COUNT_CUSTOM",con);
   oraexecsql.CommandType =CommandType.StoredProcedure;
   oraexecsql.Parameters .Add("reccount",OracleType.Int16);
   oraexecsql.Parameters ["reccount"].Direction =ParameterDirection.Output ;
   oraexecsql.ExecuteNonQuery();
   int result=Convert.ToInt32 (oraexecsql.Parameters ["reccount"].Value.ToString ());
   con.Close ();
   return result;
  }

### 如何在帆软报表中通过 JavaScript 调用 MySQL 存储过程 在帆软报表 (FineReport) 中,可以通过 JavaScript 编写自定义逻辑来实现对数据库存储过程调用。以下是具体方法以及完整的代码示例。 #### 1. 数据库连接与存储过程准备 确保已创建好 MySQL 的存储过程并测试其可用性。假设有一个名为 `sp_get_data` 的存储过程,它接受两个输入参数 (`in_param1`, `in_param2`) 并返回查询结果集。 ```sql DELIMITER $$ CREATE PROCEDURE sp_get_data(IN in_param1 INT, IN in_param2 VARCHAR(50)) BEGIN SELECT * FROM your_table WHERE column1 = in_param1 AND column2 = in_param2; END$$ DELIMITER ; ``` 此部分需提前完成,并确认存储过程能够正常运行[^1]。 --- #### 2. 帆软报表中的 JS 实现 在 FineReport 设计器中,可以利用内置的 `_g()` 方法或其他 API 来执行 SQL 或者调用存储过程。以下是一个典型的例子: ##### 步骤描述 - **绑定按钮事件**:选中报表界面上的一个按钮组件,在属性面板中为其添加点击事件。 - **编写 JS 代码**:在弹出的脚本编辑窗口中填写相应的 JavaScript 代码。 ##### 示例代码 ```javascript // 获取当前单元格对象 var cellObj = _g(); // 定义要传递给存储过程的参数 var param1Value = FR.getParameter("param1"); // 使用全局变量获取外部传入的参数值 var param2Value = FR.getParameter("param2"); if (!param1Value || !param2Value) { alert("请输入必要的参数!"); } else { try { // 执行存储过程 var sqlText = "CALL sp_get_data (?, ?)"; var resultDataSet = FR.getDataSetBySQL(sqlText, [param1Value, param2Value]); // 将结果填充到指定区域 cellObj.write(resultDataSet); // 提示成功消息 alert("存储过程调用成功!"); } catch (e) { alert("发生错误:" + e.message); } } ``` 上述代码实现了以下几个功能: - 动态读取用户输入或者预设好的参数; - 构造带有占位符 (?) 的 SQL 文字串用于调用存储过程; - 利用 `FR.getDataSetBySQL` 函数执行动态 SQL 查询并将结果保存至临时数据集中; - 最终把结果显示于目标位置。 --- #### 3. Web 应用集成配置 为了使前端页面能顺利加载和渲染由后端生成的内容,还需要适当调整 Servlet 映射规则。例如修改 web.xml 文件如下所示: ```xml <!-- 集成帆软报表 --> <servlet> <servlet-name>ReportServer</servlet-name> <servlet-class>com.fr.web.ReportServlet</servlet-class> <load-on-startup>0</load-on-startup> </servlet> <servlet-mapping> <servlet-name>ReportServer</servlet-name> <url-pattern>/ReportServer/*</url-pattern> </servlet-mapping> ``` 这样做的目的是让浏览器请求路径 `/ReportServer/...` 可被正确转发至对应的处理程序实例化服务[^2]。 --- #### 4. 参数设置注意事项 如果涉及复杂的多级联筛选条件,则可能需要用到额外的功能模块支持。比如针对 Oracle JNDI 连接池场景下的特殊适配需求,请参照官方文档进一步学习关于不同环境部署指南的信息[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值