一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - ASP.NET教程 - 在.NetCore(C#)中使用ODP.NET Core+Dapper操作Oracle數(shù)據(jù)庫

在.NetCore(C#)中使用ODP.NET Core+Dapper操作Oracle數(shù)據(jù)庫

2021-12-08 15:09曦遠(yuǎn) ASP.NET教程

這篇文章主要介紹了在.NetCore(C#)中使用ODP.NET Core+Dapper操作Oracle數(shù)據(jù)庫,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言

雖然一直在說“去IOE化”,但是在國企和政府,Oracle的歷史包袱實(shí)在太重了,甚至很多業(yè)務(wù)邏輯都是寫在Oracle的各種存儲過程里面實(shí)現(xiàn)的……

我們的系統(tǒng)主要的技術(shù)棧是Django / Spring / AspNetCore,Java的不必說對Oracle支持肯定沒問題,關(guān)鍵在于Django對Oracle版本有要求,兼容性不是特別好,Oracle版本沒辦法隨意升級的,所以我想到用.Net Core來寫個中間層,讓其他系統(tǒng)可以方便的使用Oracle的數(shù)據(jù)和存儲過程…

ODP.NET Core是一個ADO.NET驅(qū)動程序,提供從Microsoft .NET Core客戶端到Oracle數(shù)據(jù)庫的快速數(shù)據(jù)訪問。它可以在Windows和Linux上運(yùn)行。ODP.NET由一個100%托管代碼動態(tài)鏈接庫Oracle.ManagedDataAccess.dll組成,可通過NuGet安裝獲得。

這個 Oracle.ManagedDataAccess.Core 是真的方便,不用安裝Oracle客戶端,兼容性、便捷性,反正就是開箱即用,一把梭就完事了

簡單使用

首先用nuget安裝這個 Oracle.ManagedDataAccess.Core ,之后就可以執(zhí)各類操作了,不過從代碼量上看還是比較繁瑣的,上代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
var connStr = $"DATA SOURCE=127.0.0.1/db_name; PASSWORD=password; PERSIST SECURITY INFO=True; USER ID=user_id";
using (var conn = new OracleConnection(connStr)) {
  using (var command = conn.CreateCommand()) {
    try {
      if (conn.State == ConnectionState.Closed) {
        conn.Open();
      }
 
      command.BindByName = true;
      command.CommandText = $"select * from table_name";
 
      using (var reader = command.ExecuteReader()) {
        while (reader.Read()) {
          Console.WriteLine(reader.GetString("DEPART_NAME"));
        }
      }
    }
    catch (Exception ex) {
      Console.WriteLine(ex.StackTrace);
      Console.WriteLine(ex.Source);
      Console.WriteLine(ex.Message);
    }
  }
}

這就是執(zhí)行 select * from table_name 這條SQL語句的代碼,有點(diǎn)長…… 吐了

再看看執(zhí)行存儲過程的…

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
var connStr = $"DATA SOURCE=127.0.0.1/db_name; PASSWORD=password; PERSIST SECURITY INFO=True; USER ID=user_id";
using (var conn = new OracleConnection(connStr)) {
  conn.Open();
  var command = new OracleCommand("proc_name", conn) {
    CommandType = CommandType.StoredProcedure
  };
 
  // 輸入?yún)?shù)
  command.Parameters.Add(new OracleParameter("id", "0001"));
 
  // 輸出參數(shù)
  var vOut = new OracleParameter("v_out",
    OracleDbType.Varchar2,
    1000,
    "",
    ParameterDirection.InputOutput
  );
 
  command.Parameters.Add(vOut);
 
  var affectRows = command.ExecuteNonQuery();
 
  Console.WriteLine(vOut.Value);
}

這里去掉了錯誤處理,顯得短一點(diǎn),不過還是麻煩得不行……

所以這里我們要用Dapper這個輕量級ORM來簡化操作

使用Dapper

不多說,首先nuget安裝是常規(guī)操作,包名就是簡單的 Dapper 。

首先是增刪改查這類普通的SQL語句:

?
1
2
3
4
5
6
7
8
9
10
using Dapper;
 
var connStr = $"DATA SOURCE=127.0.0.1/db_name; PASSWORD=password; PERSIST SECURITY INFO=True; USER ID=user_id";
using var cn = new OracleConnection(connStr);
 
var result = cn.Query("select * from table_name");
 
foreach (var item in result) {
  Console.WriteLine(item);
}

可以看到引入Dapper之后只要使用 OracleConnection 的擴(kuò)展方法 Query 來執(zhí)行SQL就行了~ 返回的結(jié)果是 IEnumerable<dynamic> 類型,當(dāng)然你也可以在 Query 方法的泛型參數(shù)里指定返回的類型,我這里為了通用就不指定了

繼續(xù)看存儲過程的,很簡單,更上面的差不多,就多一個參數(shù)告訴程序我們的SQL類型是啥而已

?
1
2
3
4
5
6
7
8
var connStr = $"DATA SOURCE=127.0.0.1/db_name; PASSWORD=password; PERSIST SECURITY INFO=True; USER ID=user_id";
using var cn = new OracleConnection(connStr);
 
var result = cn.Query("proc_name", commandType: CommandType.StoredProcedure);
 
foreach (var item in result) {
  Console.WriteLine(item);
}

如果是有帶參數(shù)的存儲過程咋辦?

很簡單(代碼來自官方例子)~

?
1
2
var user = cnn.Query<User>("spGetUser", new {Id = 1},
    commandType: CommandType.StoredProcedure).SingleOrDefault();

ok,很方便,更多操作看Dapper文檔就完事了(我也是第一次接觸Dapper,之前都用FreeSQL和EFCore),此文完結(jié)~

Dapper項目主頁: https://github.com/StackExchange/Dapper

參考資料

.NET Core 使用ODP.NET Core連接操作Oracle數(shù)據(jù)庫: https://www.cjavapy.com/article/271/
元件開箱:Managed ODP.NET for Linux

到此這篇關(guān)于在.NetCore(C#)中使用ODP.NET Core+Dapper操作Oracle數(shù)據(jù)庫的文章就介紹到這了,更多相關(guān).NetCore操作Oracle數(shù)據(jù)庫內(nèi)容請搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://www.cnblogs.com/deali/p/14373329.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲激情在线 | 国产精品亚洲精品日韩已满 | 亚洲AV无码国产精品色午夜情 | 日本一区二区三区精品 | 毛片99| 欧美一级片免费 | 精品亚洲一区二区三区在线播放 | 秘书在办公室疯狂被hd | 99久久久久国产 | 皇上好大好硬好涨好深好爽 | 无人区乱码区1卡2卡三卡在线 | 欧美三级免费观看 | 美女被的视频 | 精品日韩欧美一区二区三区 | 嫩草在线观看视频 | 奇米777四色精品综合影院 | 国产亚洲福利精品一区二区 | 久久足恋网| 国产精品美女久久久久 | 人成网站在线观看 | 国产在线观看精品 | 高跟丝袜hdvideossex | 国产精品自在线 | 国产成人精品高清在线 | 国内精品久久久久影院网站 | 娇妻与公陈峰姚瑶最新版 | 国产精品福利在线观看入口 | 息与子中文字幕完整在线 | 日本福利片国产午夜久久 | 5g影院天天影院天天爽影院网站 | 极品虎白女在线观看一线天 | 嫩草影院地址一地址二 | 免费看美女被靠到爽的视频 | 嫩草视频在线观看视频播放 | 四虎影院大全 | 日韩一区二区三区四区区区 | 日本大尺度激情做爰叫床 | sss亚洲国产欧美一区二区 | 我把校花黑色蕾丝胸罩脱了 | 国产悠悠视频在线播放 | 香蕉eeww99国产精品 |