首页 > 解决方案 > c# Dapper 中的 dbms_output.Put_line

问题描述

我需要将变量 oracle 返回到 C#,但是我使用 Dapper,所以存在一种接收 dapper 输出的方法吗?

我试过这样

ORACLE    ...
            ,NULL                                                               /*CLIENTE_GRUPO_CPF*/
            ,'P'                                                                /*LOTE_PRODUCAO_PEDIDO*/
            ,'N'                                                                /*LIBERACAO_COMERCIAL*/
            ,NULL                                                               /*USUARIO_LIB_COMERCIAL*/
            ,NULL                                                               /*DATA_LIB_COMERCIAL*/
            ,NULL                                                               /*HORA_LIB_COMERCIAL*/
            ,'L'                                                                );
    COMMIT;
    dbms_output.put_line(var_zi_controle_id);
    END ;


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

但这样答案是0。

标签: c#oracledapper

解决方案


使用dbms_output.put_line(var_zi_controle_id);输出变量是不正确的,这不适用于像 ODP.Net 这样的编程语言/数据库驱动程序,这是用于控制台打印和验证。

Dapper由一组扩展 ADO.Net 接口的扩展方法组成,IDbConnection在 Oracle 内部,您将填写ODP.Net - OracleConnection对象,现在当您查看 ODP.Net 指南以调用任何 PL SQL 存储过程时,您有以下选项:

  1. 绑定一个输出或返回参数并将该参数填充到 PL SQL 过程中。使用 Dapper,您需要DynamicParameter在 Input 旁边绑定参数,例如 Output / Return
  2. 其他选项是您当前正在尝试的方式,您期望Select语句将值作为整数返回,因此您需要Select var_zi_controle_id在过程中,它将作为 QueryResult 出现,但您仍然需要一个包含整数值的类型 T ,在这里你会得到一个具有一个整数属性的类型/类var_zi_controle_idQuery<T>虽然返回IEnumerable<T>

我的首选方法是添加输出参数,在存储过程中分配并检索值,检查下面的链接以获得良好的参考。一个简单的例子是:

 var dynamicParameters = new DynamicParameters();
 dynamicParameters.Add("var_zi_controle_id",0,DbType.Int32,ParameterDirection.Output)

Parameter DirectionoptionsInputOutputReturnValue可以使用,但ReturnValue需要从过程中显式返回值

// 执行存储过程

conn.Execute(@"ProcedureName", dynamicParameters, commandType: CommandType.StoredProcedure);

// 获取 O/p 参数值 fromdynamicParameters

var id = dynamicParameters.Get<int>("var_zi_controle_id");

重要的是在调用返回之前设置绑定到存储过程的输出参数var_zi_controle_id,以便获取值

OracleCommand SQL 参数绑定

https://docs.oracle.com/database/121/ODPNT/OracleCommandClass.htm#ODPNT458

https://docs.oracle.com/cd/E11882_01/win.112/e23174/OracleParameterClass.htm#ODPNT1722


推荐阅读