You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过C# Dapper接收Oracle输出变量?

如何用Dapper从Oracle接收输出变量

我来帮你解决这个问题!你之前的写法之所以拿到0,核心原因是**dbms_output.put_line只是在Oracle服务器的控制台打印变量,并不会把值返回给客户端**——Dapper根本接收不到这个打印输出,所以QueryFirstOrDefault<int>只能拿到int类型的默认值0。下面给你两种可行的解决方案:

方案1:使用Oracle OUT参数(推荐用于多输出值场景)

调整PL/SQL代码

修改你的匿名块,把需要输出的变量绑定到一个外部可见的OUT参数:

DECLARE
  var_zi_controle_id NUMBER;
BEGIN
  -- 你的原有业务逻辑(比如插入操作)
  INSERT INTO your_table (col1, col2, ...) 
  VALUES (... ,NULL /*CLIENTE_GRUPO_CPF*/ ,'P' /*LOTE_PRODUCAO_PEDIDO*/ ,'N' /*LIBERACAO_COMERCIAL*/ ,NULL /*USUARIO_LIB_COMERCIAL*/ ,NULL /*DATA_LIB_COMERCIAL*/ ,NULL /*HORA_LIB_COMERCIAL*/ ,'L' )
  RETURNING zi_controle_id INTO var_zi_controle_id; -- 这里假设通过RETURNING获取ID,根据实际逻辑调整
  COMMIT;
  -- 将变量赋值给外部绑定的OUT参数
  :output_id := var_zi_controle_id;
END;

C#代码(使用Dapper+Oracle参数)

需要引用Oracle官方驱动(比如Oracle.ManagedDataAccess.Client),通过OracleParameter定义输出参数:

using Oracle.ManagedDataAccess.Client;

// 创建输出参数,指定类型和方向
var outputParam = new OracleParameter("output_id", OracleDbType.Int32, ParameterDirection.Output);

// 执行PL/SQL块
conn.Execute(sql, new { output_id = outputParam });

// 获取最终输出值
var id = (int)outputParam.Value;

方案2:返回结果集(适合单个输出值的简单场景)

调整PL/SQL代码

在PL/SQL块的最后,通过SELECT语句把变量作为结果集返回给客户端:

DECLARE
  var_zi_controle_id NUMBER;
BEGIN
  -- 你的原有业务逻辑
  INSERT INTO your_table (col1, col2, ...) 
  VALUES (... ,NULL /*CLIENTE_GRUPO_CPF*/ ,'P' /*LOTE_PRODUCAO_PEDIDO*/ ,'N' /*LIBERACAO_COMERCIAL*/ ,NULL /*USUARIO_LIB_COMERCIAL*/ ,NULL /*DATA_LIB_COMERCIAL*/ ,NULL /*HORA_LIB_COMERCIAL*/ ,'L' )
  RETURNING zi_controle_id INTO var_zi_controle_id;
  COMMIT;
  -- 将变量作为结果集返回给客户端
  SELECT var_zi_controle_id AS result_id FROM dual;
END;

C#代码(用Dapper查询结果集)

这时你原来的QueryFirstOrDefault写法就能正常工作了:

var id = conn.QueryFirstOrDefault<int>(sql);

注意事项

  • 确保你的PL/SQL逻辑正确给var_zi_controle_id赋值了(比如用RETURNING ... INTO获取插入后的ID,或者其他业务逻辑赋值)。
  • 如果使用OUT参数,必须使用Oracle官方驱动的OracleParameter,不能用Dapper的默认参数类型,因为要指定Oracle特定的参数类型和方向。

内容的提问来源于stack exchange,提问作者João Rafael Colombo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:39:46