c# - c# Dapper 中的 dbms_output.Put_line
问题描述
我需要将变量 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 存储过程时,您有以下选项:
- 绑定一个输出或返回参数并将该参数填充到 PL SQL 过程中。使用 Dapper,您需要
DynamicParameter
在 Input 旁边绑定参数,例如 Output / Return - 其他选项是您当前正在尝试的方式,您期望
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
optionsInputOutput
也ReturnValue
可以使用,但ReturnValue
需要从过程中显式返回值
// 执行存储过程
conn.Execute(@"ProcedureName", dynamicParameters, commandType: CommandType.StoredProcedure);
// 获取 O/p 参数值 fromdynamicParameters
var id = dynamicParameters.Get<int>("var_zi_controle_id");
重要的是在调用返回之前设置绑定到存储过程的输出参数var_zi_controle_id
,以便获取值
https://docs.oracle.com/database/121/ODPNT/OracleCommandClass.htm#ODPNT458
https://docs.oracle.com/cd/E11882_01/win.112/e23174/OracleParameterClass.htm#ODPNT1722
推荐阅读
- sql - postgresql 重复问题
- zoom-sdk - 需要有关 Zoom SSO 配置的帮助
- c++ - Pcl Integral Image Estimation 为正常场抛出 NAN
- go - SonarQube 中 Go 语言项目的集成测试代码覆盖率报告
- python - 从字符串中提取月份间隔
- r - 我如何在 RMarkdown 中找到对象 1 的平均值?
- html - 在 Wordpress 中将 Mailchimp 表单实现到我的页脚时,100% 宽度不起作用
- django - Django 导入导出外键
- javascript - 如何跟踪 Wikipedia 页面中以文本格式给出的 DOB 并断言一个 DOB 大于另一个使用 cypress 的 DOB?学习柏树
- django - 在 docker 容器中编辑 Django 包