在代碼生成工具Database2Sharp中使用ODP.NET(Oracle.ManagedDataAccess.dll)訪問Oracle資料庫,實現免安裝Oracle客戶端,相容32位64位Oracle驅動

来源:https://www.cnblogs.com/wuhuacong/archive/2019/11/21/11906638.html

由於我們開發的輔助工具Database2Sharp需要支持多種資料庫,雖然我們一般使用SQLServer來開發應用較多,但是Oracle等其他資料庫也是常用的資料庫之一,因此也是支持使用Oracle等資料庫進行代碼的快速生成。在此之前我一直要求用戶使用代碼生成工具的時候,如果使用Oracle開發,則... ...


由於我們開發的輔助工具Database2Sharp需要支持多種資料庫,雖然我們一般使用SQLServer來開發應用較多,但是Oracle等其他資料庫也是常用的資料庫之一,因此也是支持使用Oracle等資料庫進行代碼的快速生成。在此之前我一直要求用戶使用代碼生成工具的時候,如果使用Oracle開發,則需在開發環境中安裝Oracle客戶端,以便繼續利用微軟的System.Data.OracleClient方式訪問Oracle,不過這樣開發環境就會麻煩一些。另外還帶來一個問題,使用這些驅動的時候,由於系統的限制,還會區分32位或者64位的問題,不能實現相容性的訪問。為了徹底解決這個問題,我們使用ODP.NET(Oracle.ManagedDataAccess.dll)訪問Oracle資料庫,實現免安裝Oracle客戶端,相容32位64位Oracle驅動。

1)代碼生成工具介紹

Database2Sharp是一款代碼生成工具和資料庫文檔生成工具,該工具從2005年開始至今,一直伴隨著我們的客戶和粉絲們經歷著過各種各樣的項目開發,在實際開發中能帶來效率的提高及編程的快樂。

Database2Sharp是一款主要用於C#代碼生成以及資料庫文檔生成的工具,軟體支持Oracle、SqlServer、MySql、PostgreSQL、Sqlite、Access以及國產達夢等資料庫的代碼生成,可以生成各種架構代碼、生成Winform界面代碼、Web界面代碼(包括EasyUI和BootstrapWeb界面)、Entity Framework實體框架代碼、導出資料庫文檔、瀏覽資料庫架構、查詢數據、生成Sql腳本等,還整合自定義模板和資料庫信息的引擎,方便編寫自定義模板調試和開發。生成的框架代碼支持多種資料庫一起使用,也支持不同業務的資料庫切割為多個庫進行使用,是一種適應性非常強、彈性很好的應用框架。

Database2Sharp推薦採用軟體功能“Enterprise Library代碼生成”來生成項目代碼,這個架構體系生成整個項目工程框架,包含實體類、數據訪問類、業務類、Web頁面代碼、WCF相關服務層(可選)、Web API服務層(可選),以及各種服務的調用包裝層代碼等。該架構利用泛型及緩存機制,良好的架構極大簡化代碼,強大完善的基類機制使您甚至不用編寫一行代碼就能順利運行。一個簡單點擊幾次滑鼠就能完成一周代碼量的代碼生成工具,效率驚人、友好體貼,真正的開發好伴侶。

當然,開發的過程是一個繁複、精細的過程,因此Database2Sharp也吸收了來自我們自己的實際需求,以及很多同仁朋友的寶貴意見,一直在改進,一直努力做到更好,以求達到一個更加完美、更加易用的境界。

在我們開發軟體的時候,解決方案項目基於一定的分層組織,每個項目分層中,各個類的關係也是確定的,藉助輔助工具(結合模板引擎)可以快速生成我們所需要的代碼,並極大提高我們軟體的開發效率,Database2Sharp代碼生成工具就是一款專門針對我們自己框架結構配套的開發工具。

Database2Sharp代碼生成工具,主要是基於資料庫提取的元數據信息,根據表的信息和關係,欄位信息等內容,生成我們框架所需要分層的類代碼。

對於Winform開發,可以根據Winform框架或者混合框架的窗體界面類,生成標準的界面代碼,列表界面預設具有分頁查詢、導入導出、高級查詢、編輯、刪除事件綁定,編輯界面則具有獲取數據並顯示在控制項,保存後執行更新或者寫入的操作。

對於Web開發,可以根據EasyUI控制項界面或者Bootstrap控制項界面的不同,生成對應的視圖HTML代碼和控制器類代碼,同時這些界面預設也具有分頁查詢,導入導出,顯示明細和保存數據的功能。

軟體主要界面如下所示。

 

2、代碼生成工具中使用ODP.NET(Oracle.ManagedDataAccess.dll)訪問Oracle資料庫

首先通過Nugget程式包下載一個Oracle.ManagedDataAccess.dll的文件,然後進行使用即可,經過測試使用這個類庫,可以無視資料庫系統的位數,最重要的是減少了Oracle客戶端的安裝。

為了和原有的系統支持的OracleClient實現區分,以便繼續保留原有方式的處理,那麼我們增加一個特別的OracleManaged類實現Oracle元數據的處理即可。

 

 應用這個Oracle.ManagedDataAccess方式,相對於OracleClient方式,我們幾乎不用變化任何對象的名稱,只是換了一個命名空間而已,基本實現完全相容。

有了這個獲取數據的方式,當然需要對數據配置的界面增加一個OracleManaged的對應方式了,因為Oracle.ManagedDataAccess和OracleClient的連接字元串有所差異的。

前者Oracle.ManagedDataAccess的連接字元串變為:

Data Source=  (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = orcl.mshome.net)
        )
      );User ID=win;Password=win

依照這個配置的參數我們修改下Oracle資料庫連接字元串的配置界面如下:

 

其中我們對於Oracle連接字元串描述部分,提示參考PLSQL Developer裡面【幫助】【支持信息】 【TNS名稱】的對應部分即可,如下所示。

 

 

 

 有了這些配置信息,我們就可以不管服務端或者本地的Oracle版本是32位的還是64位的,實現全部相容,並且如果客戶端沒有安裝Oracle客戶端,照樣可以訪問Oracle服務端的數據的。

運行代碼生成工具,可以獲得Oracle的數據表等信息,可以在Oracle環境下,無需安裝Oracle客戶端,順暢使用代碼生成工具進行代碼的開發工作了。

 


您的分享是我們最大的動力!

更多相關文章
  • 1.內容介紹 深入解析tp5.1與laravel 中Facade底層原理實現 1. 什麼是Facade 2. 為什麼需要有什麼好處 3. Facade實現原理 4. 功能實現、 5. 容器註入 2.知識講解 0.什麼是Facade??為什麼需要?有什麼好處 專業解釋: 門面模式(Facade)又稱外 ...
  • Hangman 游戲簡介 百度百科 列印Hangman 其它 開始游戲 給定一個需要猜測的單詞開始游戲 def start_game(word): 已經猜錯的詞 wrong = '' 將未猜出的以 顯示 secret = hide(word) 記錄還剩多少個 ,如果為0,則為全部猜中 secret_ ...
  • 執行下麵這倆命令,找到對應的IP,增加host就能解決 nslookup github.global.ssl.fastly.Netnslookup github.com [email protected]:/var/www/html/go-project/test# nslookup github.global ...
  • 在前面簡單描述了下服務層,SOA面向服務架構,架構設計-業務邏輯層,以及一些面向設計原則理解和軟體架構設計箴言。這篇博客我們將繼續進入我們的下一層:數據訪問層。無論你用的是什麼開發模式或者是業務模式,到最後最必須具有持久化機制,持久化到持久化介質,並能對數據進行讀取和寫入CRUD。這就是數據訪問層。 ...
  • .NET Core 獲取資料庫上下文實例的方法和配置連接字元串 [TOC] 假設資料庫就兩個表:User、Blogs, 模型類如下 資料庫上下文大致這樣 ASP.NET Core 註入 ASP.NET Core 的資料庫註入是最為簡單方便的了,在 ConfigureServices 配置即可。 然後 ...
  • 一. 委托的分類 通過用什麼類型的方法來聲明為委托,可以分為兩類: 1. 委托靜態方法:把一個靜態方法給委托 2. 委托實例方法:把一個實例對象的成員方法給委托 (這兩個名字是博主取的,可能不是很專業只是為了好區分) 二. 原理部分 委托是將函數指針和實例對象打包在一起的類,它有兩個重要的成員,一個 ...
  • static void Main(string[] args) { string dir = @"C:\"; string[] dirs=Directory.GetDirectories(dir); long totalSize = 0; if(dirs!=null && di... ...
  • 在前面隨筆《在代碼生成工具Database2Sharp中使用ODP.NET(Oracle.ManagedDataAccess.dll)訪問Oracle資料庫,實現免安裝Oracle客戶端,相容32位64位Oracle驅動》中介紹了在代碼生成工具中使用ODP.NET(Oracle.ManagedDat... ...
一周排行
  • 在園子裡面有很多關於各種技術細節的研究文章,都是比較牛逼的框架研究;但是一直沒有看到關於怎麼樣提高開發效率的文章,大多提高開發效率的文章都是關於自動化等方面的輔助工具類型的,而不是開發中的一些小技巧;今天從編碼規範、編碼技巧、開發思想、設計模式等各方面的經驗來分享如何提高開發效率。 ...
  • 前言 隨著近些年微服務的流行,有越來越多的開發者和團隊所採納和使用,它的確提供了很多的優勢也解決了很多的問題,但是我們也知道也並不是銀彈,提供優勢的同時它也給我們的開發人員和團隊也帶來了很多的挑戰。 為了迎接或者採用這些新技術,開發團隊需要更加註重一些流程或工具的使用,這樣才能更好的適應這些新技術所 ...
  • 本文是本系列的完結篇。本系列前面的文章: 邏輯式編程語言極簡實現(使用C#) - 1. 邏輯式編程語言介紹 邏輯式編程語言極簡實現(使用C#) - 2. 一道邏輯題:誰是凶手 邏輯式編程語言極簡實現(使用C#) - 3. 運行原理 下午,吃飽飯的老明和小皮,各拿著一杯剛買的咖啡回到會議室,開始了邏輯 ...
  • 微服務之間的通信之gRPC 介紹 gRPC是一種與語言無關的高性能遠程過程調用 (RPC) 框架,gRPC是Google發佈的基於HTTP 2.0傳輸層協議承載的高性能開源軟體框架,提供了支持多種編程語言的、對網路設備進行配置和納管的方法。由於是開源框架,通信的雙方可以進行二次開發,所以客戶端和服務 ...
  • 一、TLS 線程本地存儲(Thread Local Storage),字面意思就是專屬某個線程的存儲空間。變數大體上分為全局變數和局部變數,一個進程中的所有線程共用地址空間,這個地址空間被劃分為幾個固有的區域,比如堆棧區,全局變數區等,全局變數存儲在全局變數區,虛擬地址固定;局部變數存儲在堆棧區,虛... ...
  • private:私有成員,在類的內部才可以訪問。 protected:保護成員,該類內部和繼承類中可以訪問。 public:公共成員,完全公開,沒有訪問限制。 internal:當前程式集內可以訪問。 ...
  • 前言 上一篇【.Net Core微服務入門全紀錄(六)——EventBus-事件匯流排】中使用CAP完成了一個簡單的Eventbus,實現了服務之間的解耦和非同步調用,並且做到數據的最終一致性。這一篇將使用IdentityServer4來搭建一個鑒權中心,來完成授權認證相關的功能。 IdentitySe ...
  • using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System. ...
  • 從今天起,我將製作一個電影推薦項目,在此寫下博客,記錄每天的成果。 其實,從我發佈 C# 爬取貓眼電影數據 這篇博客後, 我就已經開始製作電影推薦項目了,今天寫下這篇博客,也是因為項目進度已經完成50%了,我就想在這一階段停一下,回顧之前學到的知識。 一、主要為手機端 考慮到項目要有實用性,我選擇了 ...
  • 一、實現Runnable介面 public class RunnableDemo implements Runnable { public void run() { try { Thread.sleep(100); } catch (InterruptedException e) { e.print ...