成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

把C#.NET程序移植到DB2上的經驗淺談

數據庫
一直聽說DB2是個很牛叉的數據庫,但是從知道有這么一個數據庫到真正有機會用還是經過了漫長的歲月,到了今年的7、8月份才有機會用這個數據庫。最近在北京做某銀行的現金管理系統,銀行要求要用DB2數據庫,沒辦法把所有的程序都在DB2上進行了一次改進優化。

一直聽說DB2是個很牛叉的數據庫,但是從知道有這么一個數據庫到真正有機會用還是經過了漫長的歲月,到了今年的7、8月份才有機會用這個數據庫。最近在北京做某銀行的現金管理系統,銀行要求要用DB2數據庫,沒辦法把所有的程序都在DB2上進行了一次改進優化。

廢話不多說,直接分享經驗。

01:尋找DB2的安裝盤折騰了1-2周,因為不太擅長干這個,DB2有好幾個版本,會分32位、64位的不同的安裝版本,開發階段當然是運行在 Windows平臺下,只是真實部署時會在其他非Windows系統下而已,第一個安裝盤始終安裝失敗,后來同事又發了一個版本,一安裝就成功了,安裝過程非常簡單,基本上只要設置用戶名、密碼就可以了,只要找到合適的安裝盤會非常順利了,安裝程序不是很大只有幾百兆1G都不到,安裝過程完畢運行程序會出現一個錯誤,在Windows里設置一下權限就可以正常使用了、Google一下就可以解決了。

02:DB2里如何執行SQL語句摸索了2天才會,因為沒人教,身邊也沒人會這個,手頭也沒任何DB2的參考書,就靠自己瞎摸索,終于知道了如何執行SQL語句了,過了這個關后,基本上想干啥都會順利一些了,下面就是DB2的管理工具。

用戶可以與Windows的系統用戶集成在一起,用起來很方便,管理起來也靈活了。

04:DB2里2個字符相加,跟Oralce一樣,都需要用 “||” 符號,參數化也用 @符號,這些沒什么大區別,也跟Oralce類似有 Dual 等特殊的表。

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

06:DB2也有分頁的語句與Oralce類似,查幾下資料就可了。

07:DB2里也可以建立分區等等,這個跟Oralce很相似、雖然DB2的管理工具也不是很漂亮,但是用起來還算舒服,比Oralce自帶的管理工具強很多,當然說管理工具最好用的還是sqlserver的,復制粘貼、批量復制粘貼等非常友善,這方面DB2、Oralce是差距甚遠、他們沒考慮菜鳥級大眾用戶,只考慮了專家。

08:那C#訪問DB2用什么類、這個DLL哪里下載?這個折騰了不少,到IBM網站上注冊了用戶,才下載到這個DLL,雖然是VS2005版本的,但是也可以安裝,然后直接找到相應的DLL,復制過來,引用到自己的項目里就可以了。我采用了IBM.Data.DB2.dll。

09:接下來就是解決 數據庫連接串的問題,沒幾下就測試成功了數據庫連接串,參考數據庫鏈接串如下:

  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:接下來就是導數據的工作了,以前花費幾天寫了一個將數據導入到Oralce的工具,這次稍微修改幾下花費了半個小時就改進為又支持導入Oralce、也支持導入DB2等任何數據庫的導入導出工具,代碼貼出來給大家分享一下,代碼總共沒幾行、但是非常實用。

  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.         /// 導出數據庫到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.         /// 導出一個表 
  73.         /// </summary> 
  74.         /// <param name="tableName">表名</param> 
  75.         /// <param name="table">里面的數據</param> 
  76.         public void ExportTable(string tableName, string table
  77.         { 
  78.             // 這里是獲取目標數據表的方法 
  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.             // 這里是目標表的數據插入處理 
  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.                 // 清除表數據 
  102.                 // targetDB.ExecuteNonQuery(" TRUNCATE TABLE " + tableName); 
  103.                 targetDB.ExecuteNonQuery(" DELETE FROM " + tableName); 
  104.                 // 創建配套的序列 
  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:為了相對系統的了解一下DB2數據庫,狠下心30多元買了一本,翻了一天心里有感覺了,接著遇到什么問題Google一下基本上就可以解決了。

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

軟件是否值錢?想把一個軟件賣10000是很難的,很多人不能接受,但是等有需要時花費20000也搞不定就可以充分體驗到軟件貴如金,還好這些都由客戶買單否則自己還真沒實力亂折騰。這還不是開發通用權限管理系統的成本,只是實現一個DB2數據庫上的兼容性就需要有這些成本才能實現好。

若真有又便宜質量又好的軟件源碼,購買遠比自己開發強,自己寫遠沒有分析理解別人的代碼上改進幾下見效快,何必跟自己過不去呢,浪費那么多生命重復建設干啥,若我工作上遇到的難題,都可以別人能幫忙解決的話會全部購買了完事了,該休息休息了。

C#連接DB2可以用IBM.Data.DB2.dll, 有需要這個類庫的,加我QQ:252056973 索取。以上是膚淺的總結、有不足之處請指正、歡迎大家留言發表見解。

通用權限管理系統組件源碼現在支持 Access, mysql, sqlserver, Oracle, db2, SqLite 等等眾多。。。

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

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

【編輯推薦】

  1. 令我難忘的DB2數據庫之路
  2. DB2復雜的應用環境中的性能優化
  3. DB2并發連接時的性能考慮
  4. DB2實用程序的性能優化
  5. 一個筆記告訴你,從Java存儲轉到SQL存儲的過程

 

 

責任編輯:艾婧 來源: 博客園
相關推薦

2010-08-12 10:43:36

DB2 SQL移植

2010-04-09 12:20:11

Oracle SQL

2011-03-16 14:36:31

DB2開發

2009-12-16 10:42:04

.NET DB2

2009-07-16 13:26:43

DB2 JDBC驅動

2010-08-04 11:29:59

2010-08-04 11:23:59

2010-08-27 15:13:14

DB2命令AIX

2010-08-12 15:31:07

DB2數據庫

2009-08-25 17:20:57

C#實現OLE DB的

2010-08-26 10:17:31

DB2.NET開發

2009-08-27 11:26:04

ibmdw云計算

2023-09-27 09:23:56

Linux操作系統

2011-06-17 15:55:19

ArrayListC#

2010-08-11 14:32:55

DB2數據庫調優

2010-08-06 14:57:02

DB2數據庫編目

2010-09-30 15:35:40

2009-03-25 17:43:09

備份DB2IBM

2010-08-03 13:56:11

DB2表復制

2009-08-25 13:53:20

C#.NET rege
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美日韩国产一区二区三区 | 中文字幕在线第一页 | 极品粉嫩国产48尤物在线播放 | 黄色91在线 | 天天操天天插 | www.黄色在线观看 | 国产精品成人久久久久a级 久久蜜桃av一区二区天堂 | 久久精品一区二区三区四区 | 中文字幕第二十页 | 午夜伊人 | 中文字幕在线一区二区三区 | www.v888av.com| 欧美精品一区二区在线观看 | 欧美日韩免费一区二区三区 | 国产婷婷精品av在线 | 亚洲网在线 | 午夜视频在线免费观看 | 亚洲天堂中文字幕 | 欧美精品一区免费 | 精品国产黄a∨片高清在线 www.一级片 国产欧美日韩综合精品一区二区 | 国产电影一区二区 | 久久久久国产一区二区三区 | 国产精品久久久久久一级毛片 | 99re视频在线观看 | 久久久精品亚洲 | 99久久久久久久久 | 在线免费观看毛片 | 亚洲欧美男人天堂 | 91av在线视频观看 | 久久精品欧美一区二区三区不卡 | 国产精品久久国产精品 | 亚洲人成人网 | 别c我啊嗯国产av一毛片 | 99久久精品国产麻豆演员表 | 国内精品久久久久久 | 亚洲一区二区在线视频 | 一区二区中文 | aaaaaa大片免费看最大的 | 天天操天天天干 | 超碰国产在线 | 欧美激情在线播放 |