MySQL on .NET Compact Framework

摘要:MySQL on .NET CF

這次的手機應用創新開發與線上軟體商店研討會筆者介紹的內容中,
有提到了如何撰寫 SQL Server & MySQL 通用的程式,
由於研討會的時間很有限,其實一些細節沒有在研討會中提出。

MySQL 官方網站提供了 .NET Compact Framework 存取 MySQL 的連接器(原始碼)
但是就我使用的版本為止 (6.1) 根本是程式一執行就當掉了或編譯時就失敗
這問題在 MySQL 官方論壇或其它論壇上也有不少人提到,但是都沒有正確的答案。

深入之後發現問題的原因是 MySQL 所提供的原始程式碼有 Bug

1. .NET Framework 與 .NET CF 程式類別運作特性有差。
MemoryStream 在 CF 中的類別建構之後,不會自動拓展記憶體,
由於 MySQL CF 的程式碼是直接拿桌上型的來用,所以->程式當掉

解決方法:修改 MySqlPacket.cs

原本程式碼:private MemoryStream buffer = new MemoryStream();
改為以下程式碼:private MemoryStream buffer = new MemoryStream(5);

 

2. 若程式碼將 MySQL 由原本的 2.0 升級到 3.5,必須要手動刪除 CompilerGeneratedAttribute.cs  這個檔案,
因為這個東西在 3.5 裡面已經有了,不刪除的話會造成編譯時的衝突。

 

3. 執行的時候出現 "Missing Manifest Exception" 錯誤
錯誤發生的原因是因為 CF 中嘗試取用桌上型原始碼所建立的組件 DLL,
但是 CF 中沒有這個組件所以程式執行時會出現錯誤。

解決方法:修改Resources.designer.cs (第42 行)

原本程式碼:MySql.Data.MySqlClient.Properties.Resources
隨便改為自訂的組件程式碼:MySql.CF.Data.MySqlClient.Properties.Resources

勤勞樸實