![](/img/trans.png)
[英]using PLSQL dbms_output.put_line output in a winform app
[英]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存儲過程時,你有以下選擇:
DynamicParameter
來綁定輸入,如輸出/返回 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
選項也可以使用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
,以獲取要獲取的值
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.