欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

前言

雖然一直在說“去IOE化”,但是在國企和政府,Oracle的歷史包袱實在太重了,甚至很多業(yè)務(wù)邏輯都是寫在Oracle的各種存儲過程里面實現(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上運行。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
  };

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

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

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

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

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

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

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

相關(guān)文章

最新評論