我需要将变量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
选项InputOutput
和ReturnValue
,但是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/