C# dbms_output.Put_行在c Dapper中
我需要将一个变量oracle返回到C,但是我使用Dapper,那么是否存在通过Dapper接收输出的方法 我试过这样做C# dbms_output.Put_行在c Dapper中,c#,oracle,dapper,C#,Oracle,Dapper,我需要将一个变量oracle返回到C,但是我使用Dapper,那么是否存在通过Dapper接收输出的方法 我试过这样做 ORACLE ... ,NULL /*CLIENTE_GRUPO_CPF*/ ,'P'
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\u output.put\u linevar\u zi\u controle\u id;如果输出的变量不正确,这将不适用于编程语言/数据库驱动程序(如ODP.Net),这是用于控制台打印和验证
Dapper由一组扩展方法组成,这些扩展方法扩展了ADO.Net的IDbConnection接口,在Oracle内部,您可以填写ODP.Net-OracleConnection对象,现在当您查看ODP.Net指南以调用任何PL SQL存储过程时,您有以下选项:
绑定输出或返回参数,并在PL SQL过程中填充该参数。使用Dapper,除了像输出/返回这样的输入之外,还需要DynamicParameter来绑定参数
另一个选项是您当前尝试的方式,您希望Select语句以整数形式返回值,所以您需要的是在过程中选择var_zi_controle_id,它将作为QueryResult出现,但仍然需要类型T,它包含一个整数值,在这里,您将得到一个具有一个整型属性var\u zi\u controle\u id的类型/类
我的首选方法是添加输出参数,在存储过程中赋值并检索值,检查下面的链接以获得良好的参考。一个简单的例子是:
var dynamicParameters = new DynamicParameters();
dynamicParameters.Add("var_zi_controle_id",0,DbType.Int32,ParameterDirection.Output)
也可以使用参数方向选项InputOutput和ReturnValue,但ReturnValue需要过程中的显式返回值
//执行存储过程
conn.Execute(@"ProcedureName", dynamicParameters, commandType: CommandType.StoredProcedure);
//从dynamicParameters获取O/p参数值
重要的是,在调用返回之前设置绑定到存储过程的输出参数var_zi_controle_id,以便获取值
var id = dynamicParameters.Get<int>("var_zi_controle_id");