gpt4 book ai didi

c# - C# Dapper 中的 dbms_output.Put_line

转载 作者:行者123 更新时间:2023-11-30 17:30:12 31 4
gpt4 key购买 nike

我需要向 C# 返回一个变量 oracle,但是我使用 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由一组扩展方法组成,这些扩展方法扩展了 IDbConnection ADO.Net 的接口(interface),在 Oracle 内部,您将填写 ODP.Net - OracleConnection对象,现在当您查看 ODP.Net 指南以调用任何 PL SQL 存储过程时,您有以下选项:

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

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

 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 ,在调用返回之前设置绑定(bind)到存储过程的值,以获取值

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/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com