c#Dapper中的dbms_output.Put_line

时间:2018-05-14 13:29:18

标签: c# oracle dapper

我需要将一个变量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。

1 个答案:

答案 0 :(得分:1)

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

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

  1. 绑定Output或Return参数并填充PL SQL过程中的参数。使用Dapper,除输入(如输出/返回)
  2. 旁边的绑定参数需要DynamicParameter
  3. 其他选项是您当前正在尝试的方式,您期望Select语句将值返回为整数,因此您需要的是程序中的Select var_zi_controle_id,它将作为QueryResult,但是你仍然需要一个Type T,它包含一个整数值,在这里你会得到一个带有一个整数属性var_zi_controle_id的Type / class。 Query<T>虽然会返回IEnumerable<T>
  4. 我的首选方法是添加输出参数,在存储过程中分配并检索值,检查下面的链接以获得良好的参考。一个简单的例子是:

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

    Parameter Direction选项InputOutputReturnValue也可以使用,但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