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

服務器之家:專注于服務器技術及軟件下載分享
分類導航

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

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

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

2021-12-08 15:09曦遠 ASP.NET教程

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

前言

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

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

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

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

簡單使用

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

?
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);
    }
  }
}

這就是執行 select * from table_name 這條SQL語句的代碼,有點長…… 吐了

再看看執行存儲過程的…

?
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
  };
 
  // 輸入參數
  command.Parameters.Add(new OracleParameter("id", "0001"));
 
  // 輸出參數
  var vOut = new OracleParameter("v_out",
    OracleDbType.Varchar2,
    1000,
    "",
    ParameterDirection.InputOutput
  );
 
  command.Parameters.Add(vOut);
 
  var affectRows = command.ExecuteNonQuery();
 
  Console.WriteLine(vOut.Value);
}

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

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

使用Dapper

不多說,首先nuget安裝是常規操作,包名就是簡單的 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 的擴展方法 Query 來執行SQL就行了~ 返回的結果是 IEnumerable<dynamic> 類型,當然你也可以在 Query 方法的泛型參數里指定返回的類型,我這里為了通用就不指定了

繼續看存儲過程的,很簡單,更上面的差不多,就多一個參數告訴程序我們的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);
}

如果是有帶參數的存儲過程咋辦?

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

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

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

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

參考資料

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

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲天堂一区二区在线观看 | 性夜影院爽黄A爽免费动漫 性色欲情网站IWWW九文堂 | 好男人天堂网 | 青青青在线观看国产精品 | 日韩精品在线视频观看 | 无人区国产大片 | 国产欧美精品 | 香蕉视频在线观看网址 | 色老头综合网 | 日本xx高清视频免费观看 | 日韩在线天堂免费观看 | 男人天堂资源 | 91精品国产高清久久久久 | 18国产精品白浆在线观看免费 | 99er在线视频| 情欲综合网 | 午夜精品久久久久久中宇 | 国产91短视频| 亚洲丰满模特裸做爰 | 欧美艳星julnaann | 亚洲第一色视频 | 四虎国产一区 | 国产在线拍 | 99久久免费看国产精品 | 美女露奶奶 | 国色天香 社区视频 | 波多野结衣178部中文字幕 | 校园情射 | 午夜DV内射一区区 | 包射屋| japanese日本护士 | 久久婷婷丁香五月色综合啪免费 | 亚洲偷窥图区色 | 国产在线观看精品香蕉v区 国产在线观看a | 视频一本大道香蕉久在线播放 | 国产精品免费aⅴ片在线观看 | 日本高清在线播放 | japanese人妖xvideos| 亚洲国产精品久久精品成人网站 | 521色香蕉网在线观看免费 | 啾咪成人漫画免费 |