Xamarin.Forms 适用于 .NET Standard 的跨平台 SQLite ADO.NET

这篇文章主要介绍在 .NET Standard (包括 Xamarin.Forms)中使用 ADO.NET 方式,编写操作 SQLite 数据库的跨平台可复用代码。

关键词:Xamarin Xamarin.Forms .NET-Standard ADO.NET Sqlite 数据库

引入

Xamarin 有两种方式操作数据库。官方文档(见参考链接)中已经介绍每个平台都可以分别通过 ADO.NET 和 ORM ,以开发人员直接使用 SQL 查询和通过建立类和数据表之间的映射由系统自动生成查询实现共同的目标。

然而,官方文档中只是介绍了 Xamarin.Forms 如何通过 ORM 方式操作数据库,对于使用 ADO.NET 似乎并没有详细解释,而且和 Xamarin.Android 和 Xamarin.iOS 项目不同,.NET Standard 类库也不能引用 Mono.Data.Sqlite。

当然,你可以通过在类库定义一个 SQL 操作接口(或者依赖服务),然后通过各平台分别实现来解决。此外,也有第三方的适用于 .NET Standard 类库的 SQLite ADO.NET nuget 包。

关于如何在 Xamarin.Forms 中使用 ORM 方式和 sqlite-net-pcl Nuget 包操作数据库,请参阅我撰写的另一篇文章 Xamarin.Forms 访问本地 SQLite 数据库

Microsoft.Data.Sqlite

事实上,我在 MSDN 关于 UWP 使用 SQLite 数据库的文章上看到,.NET Standard 类库可以使用由 Microsoft 自己编译的 Microsoft.Data.Sqlite 。你可以在 nuget 库中搜索并添加 Microsoft.Data.Sqlite 。

需要注意的是,如果你的 UWP 项目最低编译目标版本在 Windows 10 秋季创意者更新(Fall Creators Update)以下,你需要在 Nuget 包管理器中查看并确保 Microsoft.NETCore.UniversalWindowsPlatform 版本在 5.2.2 以上,并且安装 Microsoft.Data.SQLite (请注意程序集名称结尾没有 .Core ,意味着它需要更多的依赖项)的 1.1.1 及以下版本。

官方文档推荐把最低编译目标版本设定为秋季创意者更新,好处是可以引用 .NET Standard 2.0 而不只是常规类库,这使得代码可以在其它 .NET 项目中共享。

此外,使用高版本目标平台还可以直接使用 Windows 自带的 SQLite 而无需额外下载 SQLite 二进制,这样可以减小程序大小,而且 SQLite 由 Windows 维护而无需开发人员因为 SQLite 有重大更新而发布新版本。以及程序启动过程很可能会更快。

如何开始

针对后者,你只需要为 .NET Standard 类库和 UWP 项目安装 Microsoft.Data.SQLite.Core (请注意后面的 .Core,这意味着它是核心部分),以及为 UWP 项目单独安装 SQLitePCLRaw.bundle_winsqlite3

区别

大部分 API 和在 Windows Presentation Foundation (WPF) 中使用的 System.Data.SQLite 包相同。需要注意的是,和前者相比,Microsoft.Data.SQLite 中,SQLite 开头的 API 变成小写的 Sqlite ,并且使用 new SqliteParameter(parameterName, value) 而不能使用 new SqliteParameter(parameterName) { Value = value } 因为没有包含 1 个参数的重构,属性的值作为必需的条件写进参数里。另外,没有 SqliteDataAdapter,不能直接转为 DataSet。

参考链接

MSDN – Use a SQLite database in a UWP app

MSDN – Xamarin.Forms Local Databases

发表评论

电子邮件地址不会被公开。 必填项已用*标注