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 开发人员提供的价值所在。 来看一段下面的代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
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 。