日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

基于Enterprise Library的Winform开发框架实现支持国产达梦数据库的扩展操作

發(fā)布時(shí)間:2023/12/10 数据库 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于Enterprise Library的Winform开发框架实现支持国产达梦数据库的扩展操作 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

由于一個(gè)客戶朋友的需求,需要我的Winform開發(fā)框架支持國(guó)產(chǎn)達(dá)夢(mèng)數(shù)據(jù)庫(kù)的操作,這個(gè)數(shù)據(jù)庫(kù)很早就聽過(guò),但是真正一般項(xiàng)目用的很少,一般在一些特殊的項(xiàng)目可能需要用到。由于我的Winform開發(fā)框架,是基于Enterprise Library的數(shù)據(jù)訪問(wèn)層的實(shí)現(xiàn),因此增加一個(gè)數(shù)據(jù)庫(kù)的支持很容易,本文介紹如何在框架層面上支持這種神秘的國(guó)產(chǎn)數(shù)據(jù)庫(kù)-達(dá)夢(mèng)數(shù)據(jù)庫(kù)。

1、達(dá)夢(mèng)數(shù)據(jù)庫(kù)的簡(jiǎn)單介紹

達(dá)夢(mèng)數(shù)據(jù)庫(kù)管理系統(tǒng)是達(dá)夢(mèng)公司推出的具有完全自主知識(shí)產(chǎn)權(quán)的高性能數(shù)據(jù)庫(kù)管理系統(tǒng),簡(jiǎn)稱DM。達(dá)夢(mèng)數(shù)據(jù)庫(kù)管理系統(tǒng)的最新版本是7.0版本,簡(jiǎn)稱DM7。DM7提供對(duì)SQL92的特性支持以及SQL99的核心級(jí)別支持;支持多種數(shù)據(jù)庫(kù)開發(fā)接口,包括OLE DB、ADO、ODBC、OCI、JDBC、Hibernate、PHP、PDO、DB Express以及.Net DataProvider等。

達(dá)夢(mèng)數(shù)據(jù)庫(kù)可以在(http://www.dameng.com/)上下載試用,安裝好后提供很多管理工具,安裝后可以讓它創(chuàng)建一些實(shí)例數(shù)據(jù)庫(kù),以方便我們了解數(shù)據(jù)庫(kù)的基本操作,本人對(duì)這款數(shù)據(jù)庫(kù)了解不多,不過(guò)它號(hào)稱支持SQL-92標(biāo)準(zhǔn)的,那么使用起來(lái)就不會(huì)有什么問(wèn)題的,只是一些個(gè)性化的語(yǔ)法需要查詢即可。

達(dá)夢(mèng)數(shù)據(jù)庫(kù)的分析器,可以在上面執(zhí)行自己的一些語(yǔ)句,注意它的數(shù)據(jù)庫(kù)表必須帶上一個(gè)模式前綴,類似SqlServer的dbo,不過(guò)這個(gè)是必須的。

?

2、基于Enterprise Library的Winform開發(fā)框架的架構(gòu)支持處理

我的這款基于Enterprise Library的開發(fā)框架,底層使用了微軟的數(shù)據(jù)訪問(wèn)組件Enterprise Library,以適應(yīng)多種數(shù)據(jù)庫(kù)類型的操作,它的分層如下所示,每個(gè)DAL層(如DALSQL、DALOracle等)都提供了對(duì)應(yīng)數(shù)據(jù)庫(kù)的實(shí)現(xiàn),界面層一下的分層圖如下所示。

如果增加多一種數(shù)據(jù)庫(kù),那么我們?cè)黾佣嘁粋€(gè)Enterprise Library的組件擴(kuò)展類,并在業(yè)務(wù)數(shù)據(jù)模塊里面增加對(duì)應(yīng)的DAL層即可。

對(duì)于具體的DALSQL這樣的數(shù)據(jù)實(shí)現(xiàn)層,我們不需要把數(shù)據(jù)訪問(wèn)的處理操作在全部的類里面實(shí)現(xiàn)一遍,我們可以通過(guò)抽象類的方式,把常規(guī)的數(shù)據(jù)庫(kù)處理操作抽象到基類上面,如下所示。

這樣在BaseDALSQL層(SqlServer數(shù)據(jù)庫(kù)的個(gè)性化實(shí)現(xiàn)部分),只需要實(shí)現(xiàn)部分功能即可,我們把大多數(shù)的數(shù)據(jù)庫(kù)操作,放到最頂級(jí)的數(shù)據(jù)庫(kù)訪問(wèn)基類AbstractBaseDAL類上,從而是我們能夠盡可能減少增加不同數(shù)據(jù)庫(kù)類型,需要改寫代碼的數(shù)量。

最終我們?cè)隽吭黾右粋€(gè)數(shù)據(jù)訪問(wèn)層就可以實(shí)現(xiàn)了另外一種數(shù)據(jù)庫(kù)(達(dá)夢(mèng)數(shù)據(jù)庫(kù))的實(shí)現(xiàn)了,具體的架構(gòu)設(shè)計(jì)圖如下所示。

?

3、具體接入測(cè)試案例代碼

上面小節(jié),我們論證了框架的可擴(kuò)展性,并且理論上已經(jīng)具備支持達(dá)夢(mèng)數(shù)據(jù)庫(kù)的擴(kuò)張了,本小節(jié)介紹如何具體實(shí)現(xiàn)達(dá)夢(mèng)數(shù)據(jù)庫(kù)的底層接入操作,并編寫一個(gè)簡(jiǎn)單的測(cè)試?yán)舆M(jìn)行測(cè)試,印證我們的實(shí)現(xiàn)思路。

我們知道,Enterprise Library實(shí)現(xiàn)其他數(shù)據(jù)庫(kù)的支持,需要增加一個(gè)組件擴(kuò)展類,如EntLibContrib.Data.SQLite是用來(lái)支持SQLite數(shù)據(jù)庫(kù)的,EntLibContrib.Data.MySql是用來(lái)支持Mysql的,這個(gè)擴(kuò)展類的內(nèi)容也不多,主要是用來(lái)解析如下的配置文件的.

以便能夠和Enterprise Library的對(duì)象進(jìn)行無(wú)縫的整合,那么我們可以參考MySql數(shù)據(jù)庫(kù)的擴(kuò)展類EntLibContrib.Data.MySql的做法,來(lái)創(chuàng)建一個(gè)基于國(guó)產(chǎn)達(dá)夢(mèng)數(shù)據(jù)庫(kù)的Enterprise Library擴(kuò)展類,大概項(xiàng)目代碼如下所示。

這樣我們就可以增加配置文件如下所示,它就能正常的解析并處理了。

下面我們來(lái)編寫測(cè)試的代碼來(lái)印證我們的擴(kuò)展類,實(shí)現(xiàn)Winform開發(fā)框架支持國(guó)產(chǎn)達(dá)夢(mèng)數(shù)據(jù)庫(kù)的擴(kuò)展操作。

我們創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)通用操作的輔助類來(lái)進(jìn)行講解,代碼如下所示。

/// <summary>/// 基于Enterprise Library類庫(kù)的數(shù)據(jù)訪問(wèn)測(cè)試/// </summary>public class EntLibDmHelper{public EntLibDmHelper(){}/// <summary> /// 執(zhí)行SQL查詢語(yǔ)句,返回查詢結(jié)果的所有記錄的第一個(gè)字段,用逗號(hào)分隔。 /// </summary> /// <param name="sql">SQL語(yǔ)句</param> /// <returns> /// 返回查詢結(jié)果的所有記錄的第一個(gè)字段,用逗號(hào)分隔。 /// </returns> public string SqlValueList(string sql){Database db = DatabaseFactory.CreateDatabase();DbCommand command = db.GetSqlStringCommand(sql);StringBuilder result = new StringBuilder();using (IDataReader dr = db.ExecuteReader(command)){while (dr.Read()){result.AppendFormat("{0},", dr[0].ToString());}}string strResult = result.ToString().Trim(',');return strResult;}/// <summary> /// 執(zhí)行SQL查詢語(yǔ)句,返回所有記錄的DataTable集合。 /// </summary> /// <param name="sql">SQL查詢語(yǔ)句</param> /// <returns></returns> public DataTable SqlTable(string sql){DataSet ds = new DataSet();Database db = DatabaseFactory.CreateDatabase();DbCommand command = db.GetSqlStringCommand(sql);return db.ExecuteDataSet(command).Tables[0];}}

注意,上面的代碼沒有用到達(dá)夢(mèng)的具體對(duì)象,而是使用了Enterprise Library的Database等對(duì)象來(lái)操作,這樣也就是非常方便我們進(jìn)行接口的抽象處理,可以把更多的功能放到數(shù)據(jù)庫(kù)訪問(wèn)抽象類里面了。

如果是利用達(dá)夢(mèng)的.NET Provider的對(duì)象處理數(shù)據(jù)庫(kù),那么具體的代碼應(yīng)該是這樣的。

/// <summary> /// 執(zhí)行SQL查詢語(yǔ)句,返回查詢結(jié)果的所有記錄的第一個(gè)字段,用逗號(hào)分隔。 /// </summary> /// <param name="sql">SQL語(yǔ)句</param> /// <returns> /// 返回查詢結(jié)果的所有記錄的第一個(gè)字段,用逗號(hào)分隔。 /// </returns> public string SqlValueList(string sql){DmConnection connection = new DmConnection(ConnectionString);DmCommand cmd = new DmCommand(sql, connection);connection.Open();StringBuilder result = new StringBuilder();using (DmDataReader dr = cmd.ExecuteReader()){while (dr.Read()){result.AppendFormat("{0},", dr[0].ToString());}}string strResult = result.ToString().Trim(',');return strResult;}/// <summary> /// 執(zhí)行SQL查詢語(yǔ)句,返回所有記錄的DataTable集合。 /// </summary> /// <param name="sql">SQL查詢語(yǔ)句</param> /// <returns></returns> public DataTable SqlTable(string sql){DataSet ds = new DataSet();DmDataAdapter adpater = new DmDataAdapter(sql, ConnectionString);adpater.Fill(ds);return ds.Tables[0];}

?

為了方便測(cè)試,我編寫一個(gè)簡(jiǎn)單的查詢例子來(lái)進(jìn)行介紹,如下代碼所示,這里我們主要利用了EntLibDmHelper這個(gè)輔助類對(duì)象,也就是基于Enterprise Library的擴(kuò)展的處理操作。

private void btnSearch_Click(object sender, EventArgs e){BindData();}private void BindData(){string condition = "1=1 ";if (this.txtAuthor.Text.Length > 0){condition += string.Format("AND Author like '%{0}%' ", this.txtAuthor.Text);}if (this.txtName.Text.Length > 0){condition += string.Format("AND Name like '%{0}%' ", this.txtName.Text);}if (this.txtPublisher.Text.Length > 0){condition += string.Format("AND Publisher like '%{0}%' ", this.txtPublisher.Text);}string sql = "Select * from PRODUCTION.Product Where " + condition;EntLibDmHelper helper = new EntLibDmHelper();//DMHelper helper = new DMHelper();DataTable dt = helper.SqlTable(sql);this.dataGridView1.DataSource = dt;sql = "Select count(*) from PRODUCTION.Product Where " + condition;string totalCount = helper.SqlValueList(sql);this.lblCount.Text = string.Format("共有數(shù)據(jù):{0}條", totalCount);}

最后例子運(yùn)行的界面效果如下所示。

基本上印證了我們對(duì)框架的整合,實(shí)現(xiàn)了支持國(guó)產(chǎn)達(dá)夢(mèng)數(shù)據(jù)庫(kù)的擴(kuò)展操作。剩下的就是我們模仿著把BaseDALSQL這樣的基類,為達(dá)夢(mèng)數(shù)據(jù)庫(kù)增加一個(gè)個(gè)性化的數(shù)據(jù)庫(kù)處理接口,就可以實(shí)現(xiàn)整體性框架的支持了。對(duì)于各個(gè)模塊 的數(shù)據(jù)訪問(wèn),我們需要增加一個(gè)DALDM這樣的實(shí)現(xiàn)層,基類指向BaseDALDM這樣就可以了。

?

轉(zhuǎn)載于:https://www.cnblogs.com/wuhuacong/p/4532025.html

總結(jié)

以上是生活随笔為你收集整理的基于Enterprise Library的Winform开发框架实现支持国产达梦数据库的扩展操作的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。