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

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

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

前言

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

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

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

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

簡(jiǎn)單使用

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

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語(yǔ)句的代碼,有點(diǎn)長(zhǎng)…… 吐了

再看看執(zhí)行存儲(chǔ)過(guò)程的…

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

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

所以這里我們要用Dapper這個(gè)輕量級(jí)ORM來(lái)簡(jiǎn)化操作

使用Dapper

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

首先是增刪改查這類(lèi)普通的SQL語(yǔ)句:

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

繼續(xù)看存儲(chǔ)過(guò)程的,很簡(jiǎn)單,更上面的差不多,就多一個(gè)參數(shù)告訴程序我們的SQL類(lèi)型是啥而已

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ù)的存儲(chǔ)過(guò)程咋辦?

很簡(jiǎn)單(代碼來(lái)自官方例子)~

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

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

Dapper項(xiàng)目主頁(yè): https://github.com/StackExchange/Dapper

參考資料

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

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

相關(guān)文章

  • ASP.NET MVC4 HtmlHelper擴(kuò)展類(lèi),實(shí)現(xiàn)分頁(yè)功能

    ASP.NET MVC4 HtmlHelper擴(kuò)展類(lèi),實(shí)現(xiàn)分頁(yè)功能

    本文主要做了一個(gè)HtmHelper類(lèi)的分頁(yè)擴(kuò)展函數(shù),方便在視圖中調(diào)用,有需要的朋友可以參考一下,希望對(duì)大家有所幫助。
    2016-03-03
  • ASP.NET?Core通過(guò)Microsoft.AspNetCore.App元包簡(jiǎn)化程序集引用

    ASP.NET?Core通過(guò)Microsoft.AspNetCore.App元包簡(jiǎn)化程序集引用

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

    asp.net SqlParameter如何根據(jù)條件有選擇的添加參數(shù)

    有時(shí)候?qū)憇ql語(yǔ)句的時(shí)候會(huì)根據(jù)方法傳進(jìn)來(lái)的參數(shù)來(lái)判斷sql語(yǔ)句中where條件的參數(shù),下面有個(gè)示例,大家可以參考下
    2014-06-06
  • .net 預(yù)處理指令符的使用詳解

    .net 預(yù)處理指令符的使用詳解

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

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

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

    使用grpcui測(cè)試ASP.NET core的gRPC服務(wù)

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

    .NET之后臺(tái)用戶權(quán)限管理實(shí)現(xiàn)

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

    WinForm中窗體間的數(shù)據(jù)傳遞交互的一些方法

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

    ASP.NET Core為Ocelot網(wǎng)關(guān)配置Swagger

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

    asp.net頁(yè)面?zhèn)髦禍y(cè)試實(shí)例代碼(前后臺(tái))

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

最新評(píng)論

嘉义县| 刚察县| 凤凰县| 富宁县| 梁平县| 河间市| 司法| 兴业县| 磐石市| 界首市| 沙坪坝区| 蕲春县| 岫岩| 弥勒县| 凉山| 台湾省| 三河市| 宽甸| 淳化县| 横峰县| 绍兴县| 宜阳县| 宁化县| 陵水| 新蔡县| 卓资县| 海原县| 固始县| 望谟县| 麻城市| 祁东县| 石泉县| 西华县| 溧水县| 天长市| 上虞市| 图木舒克市| 阳信县| 安化县| 崇阳县| 双峰县|