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

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

由於我們開發的輔助工具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客戶端,順暢使用代碼生成工具進行代碼的開發工作了。

 


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

-Advertisement-
Play Games
更多相關文章
  • 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 root@tao-PC:/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... ...
一周排行
    -Advertisement-
    Play Games
  • 概述:在C#中,++i和i++都是自增運算符,其中++i先增加值再返回,而i++先返回值再增加。應用場景根據需求選擇,首碼適合先增後用,尾碼適合先用後增。詳細示例提供清晰的代碼演示這兩者的操作時機和實際應用。 在C#中,++i 和 i++ 都是自增運算符,但它們在操作上有細微的差異,主要體現在操作的 ...
  • 上次發佈了:Taurus.MVC 性能壓力測試(ap 壓測 和 linux 下wrk 壓測):.NET Core 版本,今天計劃準備壓測一下 .NET 版本,來測試並記錄一下 Taurus.MVC 框架在 .NET 版本的性能,以便後續持續優化改進。 為了方便對比,本文章的電腦環境和測試思路,儘量和... ...
  • .NET WebAPI作為一種構建RESTful服務的強大工具,為開發者提供了便捷的方式來定義、處理HTTP請求並返迴響應。在設計API介面時,正確地接收和解析客戶端發送的數據至關重要。.NET WebAPI提供了一系列特性,如[FromRoute]、[FromQuery]和[FromBody],用 ...
  • 原因:我之所以想做這個項目,是因為在之前查找關於C#/WPF相關資料時,我發現講解圖像濾鏡的資源非常稀缺。此外,我註意到許多現有的開源庫主要基於CPU進行圖像渲染。這種方式在處理大量圖像時,會導致CPU的渲染負擔過重。因此,我將在下文中介紹如何通過GPU渲染來有效實現圖像的各種濾鏡效果。 生成的效果 ...
  • 引言 上一章我們介紹了在xUnit單元測試中用xUnit.DependencyInject來使用依賴註入,上一章我們的Sample.Repository倉儲層有一個批量註入的介面沒有做單元測試,今天用這個示例來演示一下如何用Bogus創建模擬數據 ,和 EFCore 的種子數據生成 Bogus 的優 ...
  • 一、前言 在自己的項目中,涉及到實時心率曲線的繪製,項目上的曲線繪製,一般很難找到能直接用的第三方庫,而且有些還是定製化的功能,所以還是自己繪製比較方便。很多人一聽到自己畫就害怕,感覺很難,今天就分享一個完整的實時心率數據繪製心率曲線圖的例子;之前的博客也分享給DrawingVisual繪製曲線的方 ...
  • 如果你在自定義的 Main 方法中直接使用 App 類並啟動應用程式,但發現 App.xaml 中定義的資源沒有被正確載入,那麼問題可能在於如何正確配置 App.xaml 與你的 App 類的交互。 確保 App.xaml 文件中的 x:Class 屬性正確指向你的 App 類。這樣,當你創建 Ap ...
  • 一:背景 1. 講故事 上個月有個朋友在微信上找到我,說他們的軟體在客戶那邊隔幾天就要崩潰一次,一直都沒有找到原因,讓我幫忙看下怎麼回事,確實工控類的軟體環境複雜難搞,朋友手上有一個崩潰的dump,剛好丟給我來分析一下。 二:WinDbg分析 1. 程式為什麼會崩潰 windbg 有一個厲害之處在於 ...
  • 前言 .NET生態中有許多依賴註入容器。在大多數情況下,微軟提供的內置容器在易用性和性能方面都非常優秀。外加ASP.NET Core預設使用內置容器,使用很方便。 但是筆者在使用中一直有一個頭疼的問題:服務工廠無法提供請求的服務類型相關的信息。這在一般情況下並沒有影響,但是內置容器支持註冊開放泛型服 ...
  • 一、前言 在項目開發過程中,DataGrid是經常使用到的一個數據展示控制項,而通常表格的最後一列是作為操作列存在,比如會有編輯、刪除等功能按鈕。但WPF的原始DataGrid中,預設只支持固定左側列,這跟大家習慣性操作列放最後不符,今天就來介紹一種簡單的方式實現固定右側列。(這裡的實現方式參考的大佬 ...