【问题标题】:dbms_output.Put_line in c# Dapperc# Dapper 中的 dbms_output.Put_line
【发布时间】:2018-10-24 04:29:09
【问题描述】:

我需要将变量 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# oracle dapper


    【解决方案1】:

    使用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 来绑定输入旁边的参数,例如输出/返回
    2. 其他选项是您当前正在尝试的方式,您期望 Select 语句将值作为整数返回,因此您需要在过程中使用 Select var_zi_controle_id,它将作为 QueryResult 出现,但您仍然需要一个类型 T,它包含一个整数值,在这里您将获得一个具有一个整数属性 var_zi_controle_id 的类型/类。 Query&lt;T&gt; 虽然返回 IEnumerable&lt;T&gt;

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

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

    Parameter Direction 选项InputOutput 和ReturnValue 也可以使用,但ReturnValue 需要从过程中显式返回值

    // 执行存储过程

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

    //从dynamicParameters获取O/p参数值

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

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

    OracleCommand SQL Parameters Binding

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

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

    【讨论】:

      猜你喜欢
      • 2011-06-22
      • 1970-01-01
      • 2023-03-20
      • 2021-07-10
      • 1970-01-01
      • 1970-01-01
      • 2014-12-15
      • 1970-01-01
      • 2012-05-13
      相关资源
      最近更新 更多