dbms_output.Put_line en c # Dapper

c# dapper oracle

Pregunta

Necesito devolver un oráculo variable a C #, sin embargo, uso Dapper, entonces ¿existe una forma de recibir un resultado por dapper?

Intenté así

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);

pero de esta manera la respuesta es 0.

Respuesta aceptada

Usando dbms_output.put_line(var_zi_controle_id); Para generar una variable es incorrecta, esto no funcionaría con los lenguajes de programación / controlador de base de datos como ODP.Net, esto es para la impresión y verificación de la consola.

Dapper consiste en un conjunto de métodos de extensión que extienden la interfaz IDbConnection de ADO.Net, internamente para Oracle usted ODP.Net - OracleConnection objeto ODP.Net - OracleConnection , ahora cuando consulte la guía ODP.Net para llamar a cualquiera de los procedimientos PL SQL almacenados, usted tener las siguientes opciones:

  1. Enlace un parámetro de Salida o Retorno y complete el parámetro en el procedimiento PL SQL. Con Dapper, necesita DynamicParameter para los parámetros de enlace junto a Input como Output / Return
  2. Otra opción es la forma en que lo está intentando actualmente, está esperando que Select statement devuelva el valor como un entero, entonces lo que necesita es Select var_zi_controle_id en el procedimiento, que vendrá como QueryResult, pero igual necesitaría un Type T, que contiene un valor entero, aquí obtendría un Tipo / clase con una propiedad entera var_zi_controle_id . Query<T> aunque devuelve IEnumerable<T>

Mi forma preferida sería agregar el parámetro Salida, asignar en el Procedimiento almacenado y recuperar el valor, verificar los enlaces debajo para una buena referencia. Un ejemplo simple sería:

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

Parameter Direction opciones de Parameter Direction InputOutput y ReturnValue también se pueden usar, pero ReturnValue necesita un valor de retorno explícito del procedimiento

// Ejecute el procedimiento almacenado

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

// Fetch O / p Parámetro Valor de dynamicParameters

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

Es importante que se var_zi_controle_id parámetro de salida var_zi_controle_id , que se une al procedimiento almacenado, antes de que la llamada regrese, para que el valor sea recuperado

Enlace de parámetros 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



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué