日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
把C#.NET程序移植到DB2上的經(jīng)驗(yàn)淺談

一直聽說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í)部署時(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ù)庫鏈接串如下:

 
 
 
 
  1.  
  2.  

10:接下來就是導(dǎo)數(shù)據(jù)的工作了,以前花費(fèi)幾天寫了一個將數(shù)據(jù)導(dǎo)入到Oralce的工具,這次稍微修改幾下花費(fèi)了半個小時(shí)就改進(jìn)為又支持導(dǎo)入Oralce、也支持導(dǎo)入DB2等任何數(shù)據(jù)庫的導(dǎo)入導(dǎo)出工具,代碼貼出來給大家分享一下,代碼總共沒幾行、但是非常實(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.         ///  
  14.         /// 導(dǎo)出數(shù)據(jù)庫到Oralce 
  15.         ///  
  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.         ///  
  72.         /// 導(dǎo)出一個表 
  73.         ///  
  74.         /// 表名 
  75.         /// 里面的數(shù)據(jù) 
  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:為了相對系統(tǒng)的了解一下DB2數(shù)據(jù)庫,狠下心30多元買了一本,翻了一天心里有感覺了,接著遇到什么問題Google一下基本上就可以解決了。

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

軟件是否值錢?想把一個軟件賣10000是很難的,很多人不能接受,但是等有需要時(shí)花費(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)限管理、工作流管理做到我能力的極致,一個人只能做好那么很少的幾件事情。


網(wǎng)頁標(biāo)題:把C#.NET程序移植到DB2上的經(jīng)驗(yàn)淺談
鏈接URL:http://m.5511xx.com/article/cdeeshi.html