簡體   English   中英

c#Dapper中的dbms_output.Put_line

[英]dbms_output.Put_line in c# Dapper

我需要將一個變量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存儲過程時,你有以下選擇:

  1. 綁定Output或Return參數並填充PL SQL過程中的參數。 使用Dapper,你需要DynamicParameter來綁定輸入,如輸出/返回
  2. 其他選項是你當前正在嘗試的方式,你期望Select語句將值返回為整數,所以你需要的是在過程中Select var_zi_controle_id ,它將作為QueryResult,但你仍然需要一個Type T,它包含一個整數值,這里你將得到一個帶有一個整數屬性var_zi_controle_id的Type / class。 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 ,以獲取要獲取的值

OracleCommand SQL參數綁定

https://docs.oracle.com/database/121/ODPNT/OracleCommandClass.htm#ODPNT458

https://docs.oracle.com/cd/E11882_01/win.112/e23174/OracleParameterClass.htm#ODPNT1722

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM