iOS 提供了 Sqlite 作為本機資料庫, MonoTouch 同樣也提供了 Mono.Data.Sqlite 對 Sqlite 進行了封裝。 與 Objective-c 使用 Sqlite 資料庫相比, 使用 MonoTouch 進行 Sqlite 資料訪問可以很簡單, 先來瀏覽一下 Mono.Data.Sqlite 提供的類庫, 有這麼幾個重要的類, 它們是:
- SqliteConnection , 繼承自 System.Data.Common.DbConnection;
- SqliteCommand , 繼承自 System.Data.Common.DbCommand ;
- SqliteDataAdapter , 繼承自 System.Data.Common.DbDataAdapter ;
- SqliteDataReader , 繼承自 System.Data.Common.DbDataReader ;
- SqliteFactory , 繼承自 System.Data.Common.DbProviderFactory ;
- SqliteParameter , 繼承自 System.Data.Common.DbParameter ;
- SqliteTransaction , 繼承自 System.Data.Common.DbTransaction ;
如果對這些以 Sqlite 開頭的類不熟悉的話, 情有可原, 可對 System.Data.Common 下面的類應該再熟悉不過了吧, 沒錯, 這就是標準的 ADO.Net , 因此只要會 ADO.Net 的開發人員, 幾乎可以立即上手, 這正是 MonoTouch 對 .Net 開發人員提供的價值所在。 來看一段下面的代碼:
using (var connection = SqliteFactory.Instance.CreateConnection()) { connection.ConnectionString = string.Format("data source={0}/northwind.db3; version=3;", Environment.CurrentDirectory); var command = connection.CreateCommand(); command.Connection = connection; command.CommandText = "SELECT * FROM Products WHERE CategoryID = ?"; var parameter = command.CreateParameter(); parameter.Value = "1"; command.Parameters.Add(parameter); connection.Open(); var reader = command.ExecuteReader(CommandBehavior.CloseConnection); while (reader.Read()) { // use reader's data here ... }}
這段代碼很普通, 除了使用了一個 SqliteFactory 之外, 和 ado.net 資料訪問幾乎沒有什麼區別, 但是, 從這段代碼可以看出, 我們項目原有的代碼幾乎可以原封不動的拿到 MonoTouch 進行編譯, 相信很多人都有自己對 ado.net 的封裝, 如果有了 MonoTouch , 這些封裝可以很方便的移植到 MonoTouch 下。
最後不得不說一句, 對於 .Net 開發人員來說, MonoTouch 真的是一個好東西, 它可以讓你儘快加入到 ios 的開發中, 最大限度的將你的 .net 技能延伸到 ios 。