uwp数据库操作

来源:互联网 发布:linux local 编辑:程序博客网 时间:2024/05/21 07:08

在绝大多数应用中,免不了要做的一项就是设置这样的本地数据存储。简单的数据存储我们可以使用 LocalSettings 或者 IsolatedStorageFile(独立存储)等等的方式来进行本地数据存储。但是,如果数据比较复杂,或者是存在关联关系的情况下,这种简单的键值存储方式是不够用的。这时候就需要用到数据库来进行存储。说到数据库,小型、轻量基于文件的 SQLite 就很适合在这种场合使用。

一、安装 SQLite for Universal App Platform VSIX 扩展

打开菜单栏的工具-扩展与更新,选择左侧的联机选项卡,在右上角搜索框输入 SQLite。

QQ截图20150910231148

安装上面这个 SQLite for Universal App Platform 扩展。等待安装完成后,重新启动 Visual Studio。

二、在项目中添加引用

1、添加对 SQLite 的引用

新建一个项目(当然在现有项目添加也可以,这里只是演示)。等待新建完成后,添加引用。

QQ截图20150910231651

QQ截图20150910231758

按照图片中的步骤,找到 SQLite for Universal App Platform,并勾选,然后按右下角的确定按钮。

2、添加 SQLite.Net 的引用

QQ截图20150910231927

QQ截图20150910234739

或者可以直接在程序包管理器控制台键入:Install-Package SQLite.Net-PCL 来进行安装。

3、确保引用无误

确保项目是把这两个包都引用上

QQ截图20150910234837


三、开始编码

1、编写用于测试的 Person 模型类

using SQLite.Net.Attributes;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace sqlite2{    class Person    {        [PrimaryKey]// 主键。        [AutoIncrement]// 自动增长。        public int Id        {            get;            set;        }        [MaxLength(5)]// 对应到数据库 varchar 的大小。        public string Name        {            get;            set;        }    }}

2、编写测试页面的前台 Xaml 代码

<Page    x:Class="sqlite2.MainPage"    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"    xmlns:local="using:sqlite2"    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"    mc:Ignorable="d">    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">        <StackPanel Margin="100">            <TextBlock Text="添加"></TextBlock>            <TextBox Header="名字"                     x:Name="txtAddName"></TextBox>            <Button Content="添加进数据库"                    Click="BtnAdd_Click"></Button>            <TextBlock Text="查询"                       Margin="0,50,0,0"></TextBlock>            <Button Content="查询所有"                    Click="BtnGetAll_Click"></Button>        </StackPanel>    </Grid></Page>

3、编写测试页面的后台 cs 代码

using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Runtime.InteropServices.WindowsRuntime;using System.Text;using Windows.Foundation;using Windows.Foundation.Collections;using Windows.UI.Popups;using Windows.UI.Xaml;using Windows.UI.Xaml.Controls;using Windows.UI.Xaml.Controls.Primitives;using Windows.UI.Xaml.Data;using Windows.UI.Xaml.Input;using Windows.UI.Xaml.Media;using Windows.UI.Xaml.Navigation;//“空白页”项模板在 http://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409 上有介绍namespace sqlite2{    /// <summary>    /// 可用于自身或导航至 Frame 内部的空白页。    /// </summary>    public sealed partial class MainPage : Page    {        public MainPage()        {            this.InitializeComponent();        }        private async void BtnAdd_Click(object sender, RoutedEventArgs e)        {            string name = txtAddName.Text;            using (var conn = AppDatabase.GetDbConnection())            {                // 需要添加的 Person 对象。                var addPerson = new Person() { Name = name };                // 受影响行数。                var count = conn.Insert(addPerson);                string msg = $"新增的 Person 对象的 Id 为 {addPerson.Id},Name 为 {addPerson.Name}";                await new MessageDialog(msg).ShowAsync();            }        }        private async void BtnGetAll_Click(object sender, RoutedEventArgs e)        {            using (var conn = AppDatabase.GetDbConnection())            {                StringBuilder msg = new StringBuilder();                var dbPerson = conn.Table<Person>();                msg.AppendLine($"数据库中总共 {dbPerson.Count()} 个 Person 对象。");                foreach (var person in dbPerson)                {                    msg.AppendLine($"Id:{person.Id};Name:{person.Name}");                }                await new MessageDialog(msg.ToString()).ShowAsync();            }        }    }}


4、编写 AppDatabase 类

using SQLite.Net;using SQLite.Net.Platform.WinRT;using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Text;using System.Threading.Tasks;using Windows.Storage;namespace sqlite2{    public static class AppDatabase    {        /// <summary>        /// 数据库文件所在路径,这里使用 LocalFolder,数据库文件名叫 test.db。        /// </summary>        public readonly static string DbPath = Path.Combine(ApplicationData.Current.LocalFolder.Path, "test.db");        public static SQLiteConnection GetDbConnection()        {            // 连接数据库,如果数据库文件不存在则创建一个空数据库。            var conn = new SQLiteConnection(new SQLitePlatformWinRT(), DbPath);            // 创建 Person 模型对应的表,如果已存在,则忽略该操作。            conn.CreateTable<Person>();            return conn;        }    }}



1 0