C#DB2開發問題隨記

來源:互聯網
上載者:User

標籤:

最近公司有個小工具需要用到DB2資料庫,以前沒玩過DB2,覺得應該很容易就實現了。

這個小工具最開始用了Nhibernate來串連DB2,Nhibernate也是第一次用。。實在是慚愧啊。。。

第一次用DB2,查了半天資料說DB2的控制中心有UI可以輸入SQL命令,結果。。控制中心沒連上。。一直報錯。

當然,我起初是不知道這是怎麼回事。還以為我裝的DB2資料庫有問題。實際上,不是。是我沒去配置中心去配置它的IP,導致不能串連。

第一次用的同學可以網上搜一下當控制中心串連不上時報錯的資訊(最開始內心是崩潰的),會有告訴你怎麼去配置的文章。

控制中心串連資料庫介面如下。打圈的地方就是執行SQL命令的地方

經過網上查詢資料,Nhibernate串連DB2的用法,什麼對應檔要編譯為內嵌資源,設定檔要加上什麼<hibernate-configuration  xmlns="urn:nhibernate-configuration-2.2"> 等等。(具體略。。瞭解也不是很清楚,需要的可以網上查查)

最後查出了串連DB2,要用IBM.Data.DB2.dll。最開始我裝的DB2都是64位,用Nhibernate串連DB2,運行程式,居然報格式不匹配(反正就是位元不對的錯誤。應該用32位的dll)。記得公司程式都編譯為x86,所以我就重裝了DB2 X86版本,然後引用的是X86的IBM.Data.DB2.dll。

然後繼續運行程式,程式又報錯:System.InvalidOperationException: SQL1159  Initialization error with DB2 .NET Data Provider, reason code 2, tokens C:\Users\Administrator\Desktop\Test\Test\bin\db2app.dll

通過網上搜尋解決方案是找到db2app.dll,然後拷貝到bin目錄下。  因為它不能加入到GAC中,也不能引用。

拷貝db2app.dll到bin目錄後,一運行,嘿,程式正常了。

然後準備收工,Release程式給QA。然後問題又出現了。。

db2app.dll必須在bin目錄下,而且還不能改變bin的檔案夾名,一改又報錯。例  c:\bin\我寫的程式檔案夾(具體exe在這裡面) db2ap.dll。 

作為一個coder這讓我覺得這個目錄結構太難看了,哪裡有exe還必須在bin目錄下。

然後又嘗試在百度,在google搜尋,一天過去了,,,還是沒找到對策。

在這期間發現如果我用OleDB 連DB2,完全不需要db2app.dll。因為之前經理說過要用Nhibernate來串連,我就不能輕易改實現方式。

最後在下班時間給經理說,這個如果要保留bin目錄,那程式算完了,如果不保留,目前就只有改為OLE DB方式來處理了,中間的操作SQL都我自己來寫。

因為工具小,所以SQL也不多。經過經理同意,我就開始用OLEDB方式了。

以前都沒用過OLEDB方式,隨便在網上找了個連接字串,寫在設定檔裡。然後開始寫代碼。。

connectionString="Provider=IBMDADB2;Database=192.168.0.5:50000;Data Source=mydb;PWD=guosange;UID=guosange

很快,程式又寫完了,,然後開始測試。。想測試一下我亂改一下IP,看報什麼錯。

結果隨意改掉IP,甚至刪掉IP,程式異常不報錯,正常運行。。經過又是一段時間測試,分析。。發現,我必須在DB2的控制中心,串連上DB2,並且連接字串中的DataSource必需為資料庫暱稱。。。不然連上不。。

基礎差啊。。。之前一直用ADO.net串連資料庫,以為這個OLEDB也算ADO,,結果,,(所以全同學們,要想爬得高,基礎要打牢啊)

值得一提的是,這個OLEDB串連資料庫,IBM.Data.DB2.dll也可以不要。

 

這樣,又讓我為難了。。。難道讓客戶用這個工具,你還得讓他先用控制中心串連資料庫,搞好暱稱,,然後再去設定檔裡改配置嗎。。 那可不行。

然後我就又搜尋ADO串連,發現原來IBM.Data.DB2.dll這個dll就是用來ADO串連的。。。然後又引用IBM.Data.DB2.dll,修改代碼,編譯,運行,出錯。。

出錯原因還是bin目錄下沒有db2app.dll(之前改為OLEDB已刪)。

 

我又惆悵了。。。難道必須用OLEDB嗎,,又試了很久,又是依然不能解決。。。心裡一直罵,用啥DB2.。。。

經過強烈思想鬥爭,覺得,感覺解決無望,覺得還是用OLEDB算了。畢竟看起來比多了一個bin目錄好些。。

編譯,發布,完工。

 

順便開啟一個2008,看網上好多用DB2程式都是vs2005和.net 2.0組合寫的,我本機最低版是vs2008,將就用吧。。

建立解決方案,選擇.net版本為2.0, 引用IBM.Data.DB2.dll,寫了段ADO串連DB2代碼

 string connectionString = "Server=192.168.0.5:50000;DataBase=mydb;UID=guosange;PWD=guosange";            string commandtext = "select count(*) from testTable";            using (IBM.Data.DB2.DB2Connection connection = new IBM.Data.DB2.DB2Connection(connectionString))            {                connection.Open();                IBM.Data.DB2.DB2Command command = new IBM.Data.DB2.DB2Command(commandtext, connection);                IBM.Data.DB2.DB2DataAdapter adapter = new IBM.Data.DB2.DB2DataAdapter(command);                DataSet ds = new DataSet();                adapter.Fill(ds);                connection.Close();            }

 

執行。。。依然提示需要db2app.dll。  覺得無望了。。

 

關閉之前,想想引用一個64位IBM.Data.DB2.dll試試看,看看報什麼錯。。編譯,執行。。結果。。TND居然成功了。。

我程式一直編譯為x86.。。。我作業系統為win7 x64。。。 但是經驗告訴我它應該報錯才對啊。。。但實際上卻沒有報錯。。。我糊塗了。。

 

原因我確實不知道。。。但結果就這樣。。。

然後趕緊修改代碼,改為ADO串連DB2,編譯,產生,測試。發布。。

為了驗證,我特意裝了個虛擬機器,裝上32位xp,裝上.net2.0 運行報錯。。

System.TypeLoadException: Could not load type ‘System.DateTimeOffset‘ from assembly ‘mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089‘.

 

解決辦法:需打上Microsoft .NET Framework 2.0 Service Pack 1 (x86)補丁,:

 

http://www.microsoft.com/downloads/zh-cn/details.aspx?familyid=79bc3b77-e02c-4ad3-aacf-a7633f706ba5

 

 

打上補丁後,運行正常。

趕緊又把代碼找出,修改,編譯,產生,測試。發布。

 

總結:ADO串連DB2,需要IBM.Data.DB2.dll。  OLEDB不需要。。但是要配置控制中心的資料庫執行個體串連。

如果報錯System.InvalidOperationException: SQL1159  Initialization error with DB2 .NET Data Provider, reason code 2

那有可能是缺少db2app.dll。拷貝複製到bin目錄下即可。

由於程式原因,請選好IBM.Data.DB2.dll的版本。出了問題一定要多查資料,多測試。

C#DB2開發問題隨記

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.