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

最佳答案

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

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


绑定一个Output或Return参数,并将其填充到PL SQL过程中。使用Dapper,您需要DynamicParameter来绑定输入(如输出/返回)旁边的参数
另一种选择是您当前正在尝试的方式,您期望Select语句将值返回为整数,所以您需要的是过程中的Select var_zi_controle_id,它将作为QueryResult出现,但仍然需要Type T ,其中包含一个整数值,在这里您将获得具有一个整数属性var_zi_controle_id的Type /类。 Query<T>虽然返回IEnumerable<T>


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

 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

关于c# - C#Dapper中的dbms_output.Put_line,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50331557/

10-13 06:28