自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

把C#.NET程序移植到DB2上的經(jīng)驗(yàn)淺談

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

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

廢話(huà)不多說(shuō),直接分享經(jīng)驗(yàn)。

01:尋找DB2的安裝盤(pán)折騰了1-2周,因?yàn)椴惶瞄L(zhǎng)干這個(gè),DB2有好幾個(gè)版本,會(huì)分32位、64位的不同的安裝版本,開(kāi)發(fā)階段當(dāng)然是運(yùn)行在 Windows平臺(tái)下,只是真實(shí)部署時(shí)會(huì)在其他非Windows系統(tǒng)下而已,第一個(gè)安裝盤(pán)始終安裝失敗,后來(lái)同事又發(fā)了一個(gè)版本,一安裝就成功了,安裝過(guò)程非常簡(jiǎn)單,基本上只要設(shè)置用戶(hù)名、密碼就可以了,只要找到合適的安裝盤(pán)會(huì)非常順利了,安裝程序不是很大只有幾百兆1G都不到,安裝過(guò)程完畢運(yùn)行程序會(huì)出現(xiàn)一個(gè)錯(cuò)誤,在Windows里設(shè)置一下權(quán)限就可以正常使用了、Google一下就可以解決了。

02:DB2里如何執(zhí)行SQL語(yǔ)句摸索了2天才會(huì),因?yàn)闆](méi)人教,身邊也沒(méi)人會(huì)這個(gè),手頭也沒(méi)任何DB2的參考書(shū),就靠自己瞎摸索,終于知道了如何執(zhí)行SQL語(yǔ)句了,過(guò)了這個(gè)關(guān)后,基本上想干啥都會(huì)順利一些了,下面就是DB2的管理工具。

用戶(hù)可以與Windows的系統(tǒng)用戶(hù)集成在一起,用起來(lái)很方便,管理起來(lái)也靈活了。

04:DB2里2個(gè)字符相加,跟Oralce一樣,都需要用 “||” 符號(hào),參數(shù)化也用 @符號(hào),這些沒(méi)什么大區(qū)別,也跟Oralce類(lèi)似有 Dual 等特殊的表。

05:DB2里,又有子增量,又有序列,這方面比sqlsever好用多了,畢竟Oracle有序列,沒(méi)字增量,但是DB2很爽,字增量、序列的功能都有,主鍵可以靈活采用采用這2個(gè)方式之一,這樣效率也高一些,也會(huì)減少一些并發(fā)帶來(lái)的麻煩,省事一些。

06:DB2也有分頁(yè)的語(yǔ)句與Oralce類(lèi)似,查幾下資料就可了。

07:DB2里也可以建立分區(qū)等等,這個(gè)跟Oralce很相似、雖然DB2的管理工具也不是很漂亮,但是用起來(lái)還算舒服,比Oralce自帶的管理工具強(qiáng)很多,當(dāng)然說(shuō)管理工具最好用的還是sqlserver的,復(fù)制粘貼、批量復(fù)制粘貼等非常友善,這方面DB2、Oralce是差距甚遠(yuǎn)、他們沒(méi)考慮菜鳥(niǎo)級(jí)大眾用戶(hù),只考慮了專(zhuān)家。

08:那C#訪(fǎng)問(wèn)DB2用什么類(lèi)、這個(gè)DLL哪里下載?這個(gè)折騰了不少,到IBM網(wǎng)站上注冊(cè)了用戶(hù),才下載到這個(gè)DLL,雖然是VS2005版本的,但是也可以安裝,然后直接找到相應(yīng)的DLL,復(fù)制過(guò)來(lái),引用到自己的項(xiàng)目里就可以了。我采用了IBM.Data.DB2.dll。

09:接下來(lái)就是解決 數(shù)據(jù)庫(kù)連接串的問(wèn)題,沒(méi)幾下就測(cè)試成功了數(shù)據(jù)庫(kù)連接串,參考數(shù)據(jù)庫(kù)鏈接串如下:

  1. <add key="UserCenterDbConnection" value="Database=JIRI_UC;UserID=administrator;Password=pAssw0rd;Server=WIN-3T3M2TTDAFK;" /> 
  2. <add key="BusinessDbConnection" value="Database=JIRI_DB;UserID=administrator;Password=pAssw0rd;Server=WIN-3T3M2TTDAFK;" /> 

10:接下來(lái)就是導(dǎo)數(shù)據(jù)的工作了,以前花費(fèi)幾天寫(xiě)了一個(gè)將數(shù)據(jù)導(dǎo)入到Oralce的工具,這次稍微修改幾下花費(fèi)了半個(gè)小時(shí)就改進(jìn)為又支持導(dǎo)入Oralce、也支持導(dǎo)入DB2等任何數(shù)據(jù)庫(kù)的導(dǎo)入導(dǎo)出工具,代碼貼出來(lái)給大家分享一下,代碼總共沒(méi)幾行、但是非常實(shí)用。

  1. //-------------------------------------------------------------------- 
  2. // All Rights Reserved , Copyright (C) 2011 , Hairihan TECH, Ltd.  
  3. //-------------------------------------------------------------------- 
  4.  
  5. using System.Data; 
  6.  
  7. namespace DotNet.Example 
  8.     using DotNet.BaseManager; 
  9.     using DotNet.DbUtilities; 
  10.  
  11.     public class ImportExportData1 
  12.     { 
  13.         /// <summary> 
  14.         /// 導(dǎo)出數(shù)據(jù)庫(kù)到Oralce 
  15.         /// </summary> 
  16.         public void Export() 
  17.         { 
  18.  
  19.             //this.ExportTable("ItemDetails"); 
  20.             //this.ExportTable("Items_Condition"); 
  21.  
  22.             //this.ExportTable("Items_Currency"); 
  23.             //this.ExportTable("Items_E_Signature"); 
  24.             //this.ExportTable("Items_RoleCategory"); 
  25.             //this.ExportTable("Items_SecurityLevel"); 
  26.             //this.ExportTable("Items_TablePermissionScope"); 
  27.  
  28.             //this.ExportTable("Base_Comment"); 
  29.             //this.ExportTable("Base_Exception"); 
  30.             //this.ExportTable("Base_File"); 
  31.  
  32.             //this.ExportTable("Base_Folder"); 
  33.             //this.ExportTable("Base_Items"); 
  34.             //this.ExportTable("Base_Log"); 
  35.             //this.ExportTable("Base_Message");       
  36.  
  37.             //this.ExportTable("Base_Organize"); 
  38.             this.ExportTable("Base_Module"); 
  39.             //this.ExportTable("Base_PermissionItem"); 
  40.  
  41.  
  42.             //this.ExportTable("Base_Role"); 
  43.  
  44.  
  45.             //this.ExportTable("Base_Staff"); 
  46.             //this.ExportTable("Base_Parameter");            
  47.             //this.ExportTable("Base_Permission"); 
  48.             //this.ExportTable("Base_PermissionScope"); 
  49.  
  50.             //this.ExportTable("Base_Sequence"); 
  51.             // this.ExportTable("Base_TableColumns"); 
  52.             // this.ExportTable("Base_User"); 
  53.             // this.ExportTable("Base_UserAddress"); 
  54.             // this.ExportTable("Base_UserOrganize"); 
  55.             // this.ExportTable("Base_UserRole"); 
  56.  
  57.  
  58.             //this.ExportTable("Base_WorkFlowActivity"); 
  59.             //this.ExportTable("Base_WorkFlowCurrent"); 
  60.             //this.ExportTable("Base_WorkFlowHistory"); 
  61.             //this.ExportTable("Base_WorkFlowProcess"); 
  62.  
  63.             System.Console.ReadLine(); 
  64.         } 
  65.  
  66.         public void ExportTable(string tableName) 
  67.         { 
  68.             ExportTable(tableName.ToUpper(), tableName.ToUpper()); 
  69.         } 
  70.  
  71.         /// <summary> 
  72.         /// 導(dǎo)出一個(gè)表 
  73.         /// </summary> 
  74.         /// <param name="tableName">表名</param> 
  75.         /// <param name="table">里面的數(shù)據(jù)</param> 
  76.         public void ExportTable(string tableName, string table
  77.         { 
  78.             // 這里是獲取目標(biāo)數(shù)據(jù)表的方法 
  79.             IDbHelper sourceDB = new SqlHelper("Data Source=192.168.0.121;Initial Catalog=UserCenterJMCB;User Id = sa ; Password = Password@1;"); 
  80.             sourceDB.Open(); 
  81.             DataTable dataTable = new DataTable(tableName); 
  82.             if (tableName.Equals(table)) 
  83.             { 
  84.                 dataTable = sourceDB.Fill("SELECT * FROM " + table); 
  85.             } 
  86.             else 
  87.             { 
  88.                 dataTable = sourceDB.Fill(table); 
  89.             } 
  90.             sourceDB.Close(); 
  91.  
  92.             // 這里是目標(biāo)表的數(shù)據(jù)插入處理 
  93.             // IDbHelper targetDB = new OracleHelper("Data Source=KANGFU;user=usercenter;password=usercenter;"); 
  94.             // IDbHelper targetDB = new DB2Helper("Database=JMCB_UC;UserID=JoinMoreCash;Password=P@ssw0rd;Server=WIN-3T3M2TTDAFK;"); 
  95.             IDbHelper targetDB = new DB2Helper("Database=JMCB_UC;UserID=administrator;Password=p@ssw0rd2077;Server=WIN-3T3M2TTDAFK;"); 
  96.             targetDB.Open(); 
  97.             // targetDB.BeginTransaction(); 
  98.             SQLBuilder sqlBuilder = new SQLBuilder(targetDB); 
  99.             try 
  100.             { 
  101.                 // 清除表數(shù)據(jù) 
  102.                 // targetDB.ExecuteNonQuery(" TRUNCATE TABLE " + tableName); 
  103.                 targetDB.ExecuteNonQuery(" DELETE FROM " + tableName); 
  104.                 // 創(chuàng)建配套的序列 
  105.                 // targetDB.ExecuteNonQuery("create sequence SEQ_" + tableName.ToUpper() + " as bigint start with 1000000 increment by 1 minvalue 10000 maxvalue 99999999999999999 cycle cache 20 order"); 
  106.                 // targetDB.ExecuteNonQuery("create sequence SEQ_" + tableName + " minvalue 1 maxvalue 999999999999999999999999 start with 1 increment by 1 cache 20"); 
  107.                 int r = 0; 
  108.                 for (r = 0; r < dataTable.Rows.Count; r++) 
  109.                 { 
  110.                     sqlBuilder.BeginInsert(tableName); 
  111.                     for (int i = 0; i < dataTable.Columns.Count; i++) 
  112.                     { 
  113.                         sqlBuilder.SetValue(dataTable.Columns[i].ColumnName, dataTable.Rows[r][dataTable.Columns[i].ColumnName]); 
  114.                     } 
  115.                     sqlBuilder.EndInsert(); 
  116.                     System.Console.WriteLine("表 " + tableName + " 已插入第 " + r.ToString() + " 行"); 
  117.                 } 
  118.                 System.Console.WriteLine(" - - 表 " + tableName + " 共插入 " + r.ToString() + " 行"); 
  119.                 targetDB.CommitTransaction(); 
  120.             } 
  121.             catch (System.Exception exception) 
  122.             { 
  123.                 // targetDB.RollbackTransaction(); 
  124.                 System.Console.WriteLine(tableName + " -- " + exception.Message); 
  125.             } 
  126.             finally 
  127.             { 
  128.                 targetDB.Close(); 
  129.             } 
  130.         } 
  131.     } 

11:為了相對(duì)系統(tǒng)的了解一下DB2數(shù)據(jù)庫(kù),狠下心30多元買(mǎi)了一本,翻了一天心里有感覺(jué)了,接著遇到什么問(wèn)題Google一下基本上就可以解決了。

前后折騰了半個(gè)多月,終于把C#.NET通用權(quán)限管理組件全部在DB2上調(diào)試了一遍,從從來(lái)沒(méi)摸過(guò)DB2到把數(shù)據(jù)庫(kù)都折騰好,很多事情說(shuō)起來(lái)簡(jiǎn)單,但是真正做好,做細(xì)節(jié)就會(huì)耗費(fèi)很多時(shí)間,2周多時(shí)間就這么一眨眼就過(guò)去了。其實(shí)這2周的成本大概是上萬(wàn)(杭州來(lái)回北京的路費(fèi) + 住酒店的費(fèi)用 + 工資成本 + 測(cè)試成本),還有好幾個(gè)人給測(cè)試確認(rèn)功能是否正確。

軟件是否值錢(qián)?想把一個(gè)軟件賣(mài)10000是很難的,很多人不能接受,但是等有需要時(shí)花費(fèi)20000也搞不定就可以充分體驗(yàn)到軟件貴如金,還好這些都由客戶(hù)買(mǎi)單否則自己還真沒(méi)實(shí)力亂折騰。這還不是開(kāi)發(fā)通用權(quán)限管理系統(tǒng)的成本,只是實(shí)現(xiàn)一個(gè)DB2數(shù)據(jù)庫(kù)上的兼容性就需要有這些成本才能實(shí)現(xiàn)好。

若真有又便宜質(zhì)量又好的軟件源碼,購(gòu)買(mǎi)遠(yuǎn)比自己開(kāi)發(fā)強(qiáng),自己寫(xiě)遠(yuǎn)沒(méi)有分析理解別人的代碼上改進(jìn)幾下見(jiàn)效快,何必跟自己過(guò)不去呢,浪費(fèi)那么多生命重復(fù)建設(shè)干啥,若我工作上遇到的難題,都可以別人能幫忙解決的話(huà)會(huì)全部購(gòu)買(mǎi)了完事了,該休息休息了。

C#連接DB2可以用IBM.Data.DB2.dll, 有需要這個(gè)類(lèi)庫(kù)的,加我QQ:252056973 索取。以上是膚淺的總結(jié)、有不足之處請(qǐng)指正、歡迎大家留言發(fā)表見(jiàn)解。

通用權(quán)限管理系統(tǒng)組件源碼現(xiàn)在支持 Access, mysql, sqlserver, Oracle, db2, SqLite 等等眾多。。。

將權(quán)限管理、工作流管理做到我能力的極致,一個(gè)人只能做好那么很少的幾件事情。

原文鏈接:http://www.cnblogs.com/jirigala/archive/2011/08/04/2126798.html

【編輯推薦】

  1. 令我難忘的DB2數(shù)據(jù)庫(kù)之路
  2. DB2復(fù)雜的應(yīng)用環(huán)境中的性能優(yōu)化
  3. DB2并發(fā)連接時(shí)的性能考慮
  4. DB2實(shí)用程序的性能優(yōu)化
  5. 一個(gè)筆記告訴你,從Java存儲(chǔ)轉(zhuǎn)到SQL存儲(chǔ)的過(guò)程

 

 

責(zé)任編輯:艾婧 來(lái)源: 博客園
相關(guān)推薦

2010-08-12 10:43:36

DB2 SQL移植

2010-04-09 12:20:11

Oracle SQL

2009-12-16 10:42:04

.NET DB2

2011-03-16 14:36:31

DB2開(kāi)發(fā)

2010-08-04 11:29:59

2009-07-16 13:26:43

DB2 JDBC驅(qū)動(dòng)

2010-08-04 11:23:59

2010-08-27 15:13:14

DB2命令AIX

2010-08-12 15:31:07

DB2數(shù)據(jù)庫(kù)

2009-08-25 17:20:57

C#實(shí)現(xiàn)OLE DB的

2010-08-26 10:17:31

DB2.NET開(kāi)發(fā)

2023-09-27 09:23:56

Linux操作系統(tǒng)

2009-08-27 11:26:04

ibmdw云計(jì)算

2011-06-17 15:55:19

ArrayListC#

2010-08-03 13:56:11

DB2表復(fù)制

2009-08-25 13:53:20

C#.NET rege

2009-08-26 14:23:14

C#.Net Fram

2010-08-06 14:57:02

DB2數(shù)據(jù)庫(kù)編目

2011-05-27 15:24:28

DB2

2010-08-11 14:32:55

DB2數(shù)據(jù)庫(kù)調(diào)優(yōu)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)