新聞中心
一直聽說DB2是個很牛叉的數(shù)據(jù)庫,但是從知道有這么一個數(shù)據(jù)庫到真正有機(jī)會用還是經(jīng)過了漫長的歲月,到了今年的7、8月份才有機(jī)會用這個數(shù)據(jù)庫。最近在北京做某銀行的現(xiàn)金管理系統(tǒng),銀行要求要用DB2數(shù)據(jù)庫,沒辦法把所有的程序都在DB2上進(jìn)行了一次改進(jìn)優(yōu)化。

廢話不多說,直接分享經(jīng)驗(yàn)。
01:尋找DB2的安裝盤折騰了1-2周,因?yàn)椴惶瞄L干這個,DB2有好幾個版本,會分32位、64位的不同的安裝版本,開發(fā)階段當(dāng)然是運(yùn)行在 Windows平臺下,只是真實(shí)部署時會在其他非Windows系統(tǒng)下而已,第一個安裝盤始終安裝失敗,后來同事又發(fā)了一個版本,一安裝就成功了,安裝過程非常簡單,基本上只要設(shè)置用戶名、密碼就可以了,只要找到合適的安裝盤會非常順利了,安裝程序不是很大只有幾百兆1G都不到,安裝過程完畢運(yùn)行程序會出現(xiàn)一個錯誤,在Windows里設(shè)置一下權(quán)限就可以正常使用了、Google一下就可以解決了。
02:DB2里如何執(zhí)行SQL語句摸索了2天才會,因?yàn)闆]人教,身邊也沒人會這個,手頭也沒任何DB2的參考書,就靠自己瞎摸索,終于知道了如何執(zhí)行SQL語句了,過了這個關(guān)后,基本上想干啥都會順利一些了,下面就是DB2的管理工具。
用戶可以與Windows的系統(tǒng)用戶集成在一起,用起來很方便,管理起來也靈活了。
04:DB2里2個字符相加,跟Oralce一樣,都需要用 “||” 符號,參數(shù)化也用 @符號,這些沒什么大區(qū)別,也跟Oralce類似有 Dual 等特殊的表。
05:DB2里,又有子增量,又有序列,這方面比sqlsever好用多了,畢竟Oracle有序列,沒字增量,但是DB2很爽,字增量、序列的功能都有,主鍵可以靈活采用采用這2個方式之一,這樣效率也高一些,也會減少一些并發(fā)帶來的麻煩,省事一些。
06:DB2也有分頁的語句與Oralce類似,查幾下資料就可了。
07:DB2里也可以建立分區(qū)等等,這個跟Oralce很相似、雖然DB2的管理工具也不是很漂亮,但是用起來還算舒服,比Oralce自帶的管理工具強(qiáng)很多,當(dāng)然說管理工具最好用的還是sqlserver的,復(fù)制粘貼、批量復(fù)制粘貼等非常友善,這方面DB2、Oralce是差距甚遠(yuǎn)、他們沒考慮菜鳥級大眾用戶,只考慮了專家。
08:那C#訪問DB2用什么類、這個DLL哪里下載?這個折騰了不少,到IBM網(wǎng)站上注冊了用戶,才下載到這個DLL,雖然是VS2005版本的,但是也可以安裝,然后直接找到相應(yīng)的DLL,復(fù)制過來,引用到自己的項(xiàng)目里就可以了。我采用了IBM.Data.DB2.dll。
09:接下來就是解決 數(shù)據(jù)庫連接串的問題,沒幾下就測試成功了數(shù)據(jù)庫連接串,參考數(shù)據(jù)庫鏈接串如下:
10:接下來就是導(dǎo)數(shù)據(jù)的工作了,以前花費(fèi)幾天寫了一個將數(shù)據(jù)導(dǎo)入到Oralce的工具,這次稍微修改幾下花費(fèi)了半個小時就改進(jìn)為又支持導(dǎo)入Oralce、也支持導(dǎo)入DB2等任何數(shù)據(jù)庫的導(dǎo)入導(dǎo)出工具,代碼貼出來給大家分享一下,代碼總共沒幾行、但是非常實(shí)用。
- //--------------------------------------------------------------------
- // All Rights Reserved , Copyright (C) 2011 , Hairihan TECH, Ltd.
- //--------------------------------------------------------------------
- using System.Data;
- namespace DotNet.Example
- {
- using DotNet.BaseManager;
- using DotNet.DbUtilities;
- public class ImportExportData1
- {
- ///
- /// 導(dǎo)出數(shù)據(jù)庫到Oralce
- ///
- public void Export()
- {
- //this.ExportTable("ItemDetails");
- //this.ExportTable("Items_Condition");
- //this.ExportTable("Items_Currency");
- //this.ExportTable("Items_E_Signature");
- //this.ExportTable("Items_RoleCategory");
- //this.ExportTable("Items_SecurityLevel");
- //this.ExportTable("Items_TablePermissionScope");
- //this.ExportTable("Base_Comment");
- //this.ExportTable("Base_Exception");
- //this.ExportTable("Base_File");
- //this.ExportTable("Base_Folder");
- //this.ExportTable("Base_Items");
- //this.ExportTable("Base_Log");
- //this.ExportTable("Base_Message");
- //this.ExportTable("Base_Organize");
- this.ExportTable("Base_Module");
- //this.ExportTable("Base_PermissionItem");
- //this.ExportTable("Base_Role");
- //this.ExportTable("Base_Staff");
- //this.ExportTable("Base_Parameter");
- //this.ExportTable("Base_Permission");
- //this.ExportTable("Base_PermissionScope");
- //this.ExportTable("Base_Sequence");
- // this.ExportTable("Base_TableColumns");
- // this.ExportTable("Base_User");
- // this.ExportTable("Base_UserAddress");
- // this.ExportTable("Base_UserOrganize");
- // this.ExportTable("Base_UserRole");
- //this.ExportTable("Base_WorkFlowActivity");
- //this.ExportTable("Base_WorkFlowCurrent");
- //this.ExportTable("Base_WorkFlowHistory");
- //this.ExportTable("Base_WorkFlowProcess");
- System.Console.ReadLine();
- }
- public void ExportTable(string tableName)
- {
- ExportTable(tableName.ToUpper(), tableName.ToUpper());
- }
- ///
- /// 導(dǎo)出一個表
- ///
- /// 表名
- /// 里面的數(shù)據(jù)
- public void ExportTable(string tableName, string table)
- {
- // 這里是獲取目標(biāo)數(shù)據(jù)表的方法
- IDbHelper sourceDB = new SqlHelper("Data Source=192.168.0.121;Initial Catalog=UserCenterJMCB;User Id = sa ; Password = Password@1;");
- sourceDB.Open();
- DataTable dataTable = new DataTable(tableName);
- if (tableName.Equals(table))
- {
- dataTable = sourceDB.Fill("SELECT * FROM " + table);
- }
- else
- {
- dataTable = sourceDB.Fill(table);
- }
- sourceDB.Close();
- // 這里是目標(biāo)表的數(shù)據(jù)插入處理
- // IDbHelper targetDB = new OracleHelper("Data Source=KANGFU;user=usercenter;password=usercenter;");
- // IDbHelper targetDB = new DB2Helper("Database=JMCB_UC;UserID=JoinMoreCash;Password=P@ssw0rd;Server=WIN-3T3M2TTDAFK;");
- IDbHelper targetDB = new DB2Helper("Database=JMCB_UC;UserID=administrator;Password=p@ssw0rd2077;Server=WIN-3T3M2TTDAFK;");
- targetDB.Open();
- // targetDB.BeginTransaction();
- SQLBuilder sqlBuilder = new SQLBuilder(targetDB);
- try
- {
- // 清除表數(shù)據(jù)
- // targetDB.ExecuteNonQuery(" TRUNCATE TABLE " + tableName);
- targetDB.ExecuteNonQuery(" DELETE FROM " + tableName);
- // 創(chuàng)建配套的序列
- // targetDB.ExecuteNonQuery("create sequence SEQ_" + tableName.ToUpper() + " as bigint start with 1000000 increment by 1 minvalue 10000 maxvalue 99999999999999999 cycle cache 20 order");
- // targetDB.ExecuteNonQuery("create sequence SEQ_" + tableName + " minvalue 1 maxvalue 999999999999999999999999 start with 1 increment by 1 cache 20");
- int r = 0;
- for (r = 0; r < dataTable.Rows.Count; r++)
- {
- sqlBuilder.BeginInsert(tableName);
- for (int i = 0; i < dataTable.Columns.Count; i++)
- {
- sqlBuilder.SetValue(dataTable.Columns[i].ColumnName, dataTable.Rows[r][dataTable.Columns[i].ColumnName]);
- }
- sqlBuilder.EndInsert();
- System.Console.WriteLine("表 " + tableName + " 已插入第 " + r.ToString() + " 行");
- }
- System.Console.WriteLine(" - - 表 " + tableName + " 共插入 " + r.ToString() + " 行");
- targetDB.CommitTransaction();
- }
- catch (System.Exception exception)
- {
- // targetDB.RollbackTransaction();
- System.Console.WriteLine(tableName + " -- " + exception.Message);
- }
- finally
- {
- targetDB.Close();
- }
- }
- }
- }
11:為了相對系統(tǒng)的了解一下DB2數(shù)據(jù)庫,狠下心30多元買了一本,翻了一天心里有感覺了,接著遇到什么問題Google一下基本上就可以解決了。
前后折騰了半個多月,終于把C#.NET通用權(quán)限管理組件全部在DB2上調(diào)試了一遍,從從來沒摸過DB2到把數(shù)據(jù)庫都折騰好,很多事情說起來簡單,但是真正做好,做細(xì)節(jié)就會耗費(fèi)很多時間,2周多時間就這么一眨眼就過去了。其實(shí)這2周的成本大概是上萬(杭州來回北京的路費(fèi) + 住酒店的費(fèi)用 + 工資成本 + 測試成本),還有好幾個人給測試確認(rèn)功能是否正確。
軟件是否值錢?想把一個軟件賣10000是很難的,很多人不能接受,但是等有需要時花費(fèi)20000也搞不定就可以充分體驗(yàn)到軟件貴如金,還好這些都由客戶買單否則自己還真沒實(shí)力亂折騰。這還不是開發(fā)通用權(quán)限管理系統(tǒng)的成本,只是實(shí)現(xiàn)一個DB2數(shù)據(jù)庫上的兼容性就需要有這些成本才能實(shí)現(xiàn)好。
若真有又便宜質(zhì)量又好的軟件源碼,購買遠(yuǎn)比自己開發(fā)強(qiáng),自己寫遠(yuǎn)沒有分析理解別人的代碼上改進(jìn)幾下見效快,何必跟自己過不去呢,浪費(fèi)那么多生命重復(fù)建設(shè)干啥,若我工作上遇到的難題,都可以別人能幫忙解決的話會全部購買了完事了,該休息休息了。
C#連接DB2可以用IBM.Data.DB2.dll, 有需要這個類庫的,加我QQ:252056973 索取。以上是膚淺的總結(jié)、有不足之處請指正、歡迎大家留言發(fā)表見解。
通用權(quán)限管理系統(tǒng)組件源碼現(xiàn)在支持 Access, mysql, sqlserver, Oracle, db2, SqLite 等等眾多。
將權(quán)限管理、工作流管理做到我能力的極致,一個人只能做好那么很少的幾件事情。
新聞名稱:把C#.NET程序移植到DB2上的經(jīng)驗(yàn)淺談
文章路徑:http://m.fisionsoft.com.cn/article/cdeeshi.html


咨詢
建站咨詢
