最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言

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

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

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

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

簡單使用

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

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語句的代碼,有點長…… 吐了

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

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安裝是常規(guī)操作,包名就是簡單的 Dapper 。

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

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 來執(zhí)行SQL就行了~ 返回的結果是 IEnumerable<dynamic> 類型,當然你也可以在 Query 方法的泛型參數里指定返回的類型,我這里為了通用就不指定了

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

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

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

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

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數據庫內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • ASP.NET MVC4 HtmlHelper擴展類,實現(xiàn)分頁功能

    ASP.NET MVC4 HtmlHelper擴展類,實現(xiàn)分頁功能

    本文主要做了一個HtmHelper類的分頁擴展函數,方便在視圖中調用,有需要的朋友可以參考一下,希望對大家有所幫助。
    2016-03-03
  • ASP.NET?Core通過Microsoft.AspNetCore.App元包簡化程序集引用

    ASP.NET?Core通過Microsoft.AspNetCore.App元包簡化程序集引用

    這篇文章介紹了ASP.NET?Core通過Microsoft.AspNetCore.App元包簡化程序集引用的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • asp.net SqlParameter如何根據條件有選擇的添加參數

    asp.net SqlParameter如何根據條件有選擇的添加參數

    有時候寫sql語句的時候會根據方法傳進來的參數來判斷sql語句中where條件的參數,下面有個示例,大家可以參考下
    2014-06-06
  • .net 預處理指令符的使用詳解

    .net 預處理指令符的使用詳解

    這篇文章主要介紹了.net 預處理指令符的使用詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • ASP.NET泛型四之使用Lazy<T>實現(xiàn)延遲加載

    ASP.NET泛型四之使用Lazy<T>實現(xiàn)延遲加載

    這篇文章介紹了ASP.NET泛型使用Lazy<T>實現(xiàn)延遲加載的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • 使用grpcui測試ASP.NET core的gRPC服務

    使用grpcui測試ASP.NET core的gRPC服務

    這篇文章介紹了使用grpcui測試ASP.NET core gRPC服務的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • .NET之后臺用戶權限管理實現(xiàn)

    .NET之后臺用戶權限管理實現(xiàn)

    在功能性比較強大的后臺管理網站處于各種角度考慮多有應用權限管理功能。以公司內部管理系統(tǒng)為例,管理員根據不同員工所在不同部門賦予其不同權限,或者根據上下級隸屬關系實現(xiàn)“金字塔”管理。本文內容有不盡不實之處懇請指正。
    2013-02-02
  • WinForm中窗體間的數據傳遞交互的一些方法

    WinForm中窗體間的數據傳遞交互的一些方法

    通過子窗口向外引發(fā)一個事件,父窗口去實現(xiàn)該事件,我們可以再不關閉父窗口和子窗口的情況下進行數據的傳輸顯示
    2012-12-12
  • ASP.NET Core為Ocelot網關配置Swagger

    ASP.NET Core為Ocelot網關配置Swagger

    這篇文章介紹了ASP.NET Core為Ocelot網關配置Swagger的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • asp.net頁面?zhèn)髦禍y試實例代碼(前后臺)

    asp.net頁面?zhèn)髦禍y試實例代碼(前后臺)

    本文為大家詳細介紹下asp.net頁面?zhèn)髦档木唧w實現(xiàn),感興趣的朋友可以參考下哈,本人水平有限,還請各位朋友多多指教
    2013-06-06

最新評論

庆阳市| 宜兰县| 仪征市| 荆门市| 壤塘县| 河池市| 永德县| 越西县| 辰溪县| 江油市| 于都县| 密山市| 桃园县| 大冶市| 双鸭山市| 扎赉特旗| 鄂托克旗| 墨竹工卡县| 治县。| 岳西县| 商都县| 万山特区| 成武县| 霍邱县| 镶黄旗| 荃湾区| 松溪县| 蓝田县| 桦川县| 加查县| 郯城县| 鹤壁市| 息烽县| 阳泉市| 蒙城县| 河北区| 麻江县| 泗阳县| 宣化县| 马关县| 吴堡县|