wp8.1 SQLite的基本使用

时间:2023-03-09 18:39:31
wp8.1 SQLite的基本使用

SQLite是一个轻量级的关系型数据库,正是由于其精悍小巧,在移动端平台被广泛应用,但不适合处理大量数据和批量操作。它的底层是由C语言编写,最初设计是为了应用于嵌入式,占用资源非常低且简单易用,而且绝大部分程序语言都可以很好的与之结合。在.net中它的sdk中支持linq实现方式,使用更加方便。

sdk安装。

wp8.1 SQLite的基本使用

安装好了之后,我们引用dll。

wp8.1 SQLite的基本使用

这时候出现这样的错误,这是由于sdk只支持arm和32位的编译环境。

wp8.1 SQLite的基本使用

可以将通过项目属性将平台目标选为32位。

这里要说明一下,sqlite for wp8.1 sdk适用于32位和winrt,调试的时候可以选为32位,编译发布的时候,wp只能识别这个arm平台的环境。否则会报出 Error - Deployment optimization failed due to an assembly that's not valid. Try rebuilding the project, and then try again.

wp8.1 SQLite的基本使用

接下来还需要安装sqlite-net,可以这行package console的shell命令。

wp8.1 SQLite的基本使用

这时候我们的项目中会出现两个cs文件。

wp8.1 SQLite的基本使用

接下来我们来验证一下sdk,首先创建一个表对象。

 using System;
using SQLite; namespace FY.Weather.DataModel
{
[Table("Temp")]
public class Temp
{
[PrimaryKey, AutoIncrement]
public int Id { get; set; } public string JsonData { get; set; } public DateTime CreationDate { get; set; }
}
}

调用sdk创建表。

 private async void CreateTemp()
{
string dbName = ViewModelLocator.Instance.DBName;
if (!await Common.CheckFileAsync(dbName))
{
SQLite.SQLiteAsyncConnection conn = new SQLite.SQLiteAsyncConnection(dbName);
await conn.CreateTableAsync<Temp>();
}
}

获取表数据。

 private async System.Threading.Tasks.Task<Temp> GetTemp(int id)
{
SQLite.SQLiteAsyncConnection conn = new SQLite.SQLiteAsyncConnection(ViewModelLocator.Instance.DBName);
var query = await conn.QueryAsync<Temp>("select * from temp where id=?", new object[] { id });
if (query != null && query.Count > )
{
return query[];
}
return null;
}

添加修改数据。

 private async void AddOrEditTemp(Temp temp)
{
SQLite.SQLiteAsyncConnection conn = new SQLite.SQLiteAsyncConnection(ViewModelLocator.Instance.DBName);
var query = await conn.QueryAsync<Temp>("select * from temp where id=?", new object[] { temp.Id });
if (query != null && query.Count > )
{
await conn.UpdateAsync(temp);
}
else
{
await conn.InsertAsync(temp);
}
}

验证数据库文件是否存在。

 public static async System.Threading.Tasks.Task<bool> CheckFileAsync(string fileName)
{
bool fileIsExist = true;
try
{
Windows.Storage.StorageFile sf = await Windows.Storage.ApplicationData.Current.LocalFolder.GetFileAsync(fileName);
}
catch
{
fileIsExist = false;
}
return fileIsExist;
}