数据库说简单点就是增删改查,但是对新手来说也是要爆肝的。作为一个新手爆肝无数次啊,

血的教训啊现在UWP的教程又少,说多了都是泪。留下来免得以后又爆肝。还有:一定要写注释!一定要写注释!一定要写注释! 重要的事情说三遍!

  1.首先,准备工作:

  1)引用:

      

    获取途径:VS里的扩展和更新、NuGet等。

  2)数据库模型:

 internal class ACCOURT
{
public ACCOURT() { } //空构造函数
public ACCOURT(int ID,double Amount,string Descr,DateTime Time,string Mark,string Company)
{//重载构造函数,用来后面把UI上的数据传入数据库
this.UID = ID;
this.Amount = Amount;
this.Descr = Descr;
this.Time = Time;
this.Mark = Mark;
this.Company = Company;
}
/// <summary>
/// 编号
/// </summary>
[PrimaryKey] //主键
[AutoIncrement]//自增
[NotNull]//不能为空
public int UID { get; set; } /// <summary>
/// 金额
/// </summary>
public double Amount { get; set; } /// <summary>
/// 备注
/// </summary>
public string Descr { get; set; } /// <summary>
/// 时间
/// </summary>
public DateTime Time { get; set; } /// <summary>
/// 标签
/// </summary>
public string Mark { get; set; } /// <summary>
/// 所属公司
/// </summary>
public string Company { get; set; }
}

  3.写帮助类:

   0)引入SQLite.net

 using SQLite.Net;
using SQLite.Net.Platform.WinRT;
using SQLite.Net.Interop;
using SQLite.Net.Attributes;
//管它用不用先放进来

  1)数据库路径:

  /// <summary>
/// 数据路径
/// </summary>
public string DbName = "SQLite.db";//名字你就随便取了
public string DbPath;//可以再这初始化,亦可以在后面在初始化
// public string DbPath=Path.Combine(ApplicationData.Current.LocalFolder.Path, DbName);

  2)创建数据库连接:

 #region 创建数据库链接
/// <summary>
/// 创建数据库连接
/// </summary>
/// <returns></returns>
internal SQLite.Net.SQLiteConnection GetCreateConn()
{
DbPath = Path.Combine(ApplicationData.Current.LocalFolder.Path, DbName);
var con = new SQLite.Net.SQLiteConnection(new SQLitePlatformWinRT(), DbPath); return con; }
#endregion

  3)创建数据库:

 #region 创建数据库
/// <summary>
/// 如果没有数据库,就创建一个数据库。
/// </summary>
internal void CreateDB()
{/// <summary>
/// 数据库文件所在路径,这里使用 LocalFolder
/// </summary>
DbPath = Path.Combine(ApplicationData.Current.LocalFolder.Path, DbName);
using (var conn = GetCreateConn())
{
//这里什么都不写就是创建一个空数据库
conn.CreateTable<ACCOURT>();//根据ACCOURT模型创建数据表 }
}
#endregion

  特别说明:增删改这3个方法调用传入的ACCOURT addAccourt 参数,最好改为object类型,这样更具有通用性,应为一个APP不可能只有一个表

哇哈哈,写完才看到ACCOURT本来是写ACCOUNT的写错了,那就将错就错。嘎嘎。

  4)插入数据:

 #region 增
      
internal int AddData(ACCOURT addAccourt)
{
int result = ;
using (var conn = GetCreateConn())
{
result = conn.Insert(addAccourt);
conn.Close();
} return result;
}
#endregion

  5)删除数据:

 #region 删
internal int DeleteData(ACCOURT AccourtUID)
{
int result = ;
DbPath = Path.Combine(ApplicationData.Current.LocalFolder.Path, DbName);
using (var conn = GetCreateConn())
{
result = conn.Delete(AccourtUID);
conn.Close();
}
return result;
} #endregion

  6)修改数据:

  #region 改
internal int UpadateData(ACCOURT updataAccourt)
{
int result = ;
DbPath = Path.Combine(ApplicationData.Current.LocalFolder.Path, DbName);
using (var conn = GetCreateConn())
{
result = conn.Update(updataAccourt);
//conn.Close();
}
return result;
}

  7)查询数据:

 #region 查
/// <summary>
/// 模糊查询
/// </summary>
/// <param name="conditions">文本框输入的条件</param>
/// <returns></returns>
internal List<ACCOURT> CheckData(string conditions)
{ var temSTR = "%"+conditions+"%";
#region
using (var conn = GetCreateConn())
{ return conn.Query<ACCOURT>("select * from ACCOURT where Company like ? or Descr like ? or UID like ? or Mark like ? or Time like ? or Amount like ?;", temSTR, temSTR, temSTR, temSTR, temSTR, temSTR); }
#endregion
} #endregion

  查询只个方法要说明下:这个他的原型:

 Query<ACCOURT>(string sql,params objcet [] args)

Sql:这就不用说明了就是SQL语句。

params:不确定个数的参数列表。

  

 Query<ACCOURT>("select * from ACCOURT where Company like ? or Descr like ? or UID like ? or Mark like ? or Time like ? or Amount like ?;", temSTR, temSTR, temSTR, temSTR, temSTR, temSTR)
//多字段模糊查询,SQL中有多少个"?"就在后面的params中输入多少个参数

  8)读取数据:

 #region 读
internal ObservableCollection<ACCOURT> ReadData(ObservableCollection<ACCOURT> accourt)
{
accourt.Clear();
DbPath = Path.Combine(ApplicationData.Current.LocalFolder.Path, DbName);
CreateDB();
using (var conn = GetCreateConn())
{
var dbAccourt = conn.Table<ACCOURT>();
foreach (var item in dbAccourt)
{
accourt.Add(item);
}
//conn.Close();
}
return accourt;
}
#endregion

总结

可以看出:增、删、改 这3个方法是差不多的

查询要复杂一点,我想其他任何数据库应该都差不多,我自己目前还没有接触过其他的数据库。

哦,还有一点忘记了,在VS用代码分析的时候会提示:conn.Close(); 多次释放,最好还是删除它。                           

欢迎大家留言交流

最后是一个dome的代码:

下载

[UWP小白日记-2]SQLite数据库DOME的更多相关文章

  1. UWP开发随笔——使用SQLite数据库

    摘要 大多数的app都需要数据存储,在数据存储这方面,强大的windows把app数据分为两种:settings和files,并提供了十分简洁的api,让开发者能够轻松使用.但是在有些场景下,app的 ...

  2. [UWP小白日记-9]页面跳转过度动画(二)

    又打算动手写了 [UWP小白日记-6]页面跳转过度动画 上次写的,这次随着学习的进度使用新的玩法. 最近在搞GIT的学习,结果把好好的项目玩坏,都不知道当时是怎么想的拿在写的APP来玩GIT,害我重写 ...

  3. [UWP小白日记-11]在UWP中使用Entity Framework Core(Entity Framework 7)操作SQLite数据库(一)

    前言 本文中,您将创建一个通用应用程序(UWP),使用Entity Framework Core(Entity Framework 7)框架在SQLite数据库上执行基本的数据访问. 准备: Enti ...

  4. [UWP小白日记-1]判断APP是否是第一次运行初始化SQLITE数据库

    利用应用程序设置来实现此功能. 1.首先,获取APP设置的容器: ApplicationDataContainer localSettings = ApplicationData.Current.Lo ...

  5. [UWP小白日记-3]记账项目-1

    学了一段时间的UWP,来个项目试试手. 本来是想边做边学MVVMLight的结果感觉MVVM对于萌新来说太高难,以后再把这个项目改造成MVVMLight框架的项目. 下面进入正题. 中间那快空白打算放 ...

  6. [UWP小白日记-15]在UWP手机端实时限制Textbox的输入

    说实话重来没想到验证输入是如此的苦逼的一件事情.     网上好多验证都是在输入完成后再验证,我的想法是在输入的时候就限制输入,这样我就不用再写代码来验证了 应为是手机端,所以不用判断其他非法字符,直 ...

  7. [UWP小白日记-8]一些零碎的东西

    设置启动窗口大小 直接上代码了没什么好解释的了,既然能设置最小,那铁定就能设置最大 public MainPage() { //设定窗口启动显示大小 ApplicationView.Preferred ...

  8. [UWP小白日记-12]使用新的Composition API来实现控件的阴影

    前言 看了好久官方的Windows UI Dev Labs示例好久才有点心得,真是头大.(其实是英语幼儿园水平(⊙﹏⊙)b) 真的网上关于这个API的资料可以说几乎没有. 正文 首先用这东西的添加WI ...

  9. [UWP小白日记-7]转换MVA学院的XML字幕为SRT (二)

    瞎扯淡 上个版本,非常蠢用来N多的循环导致非常卡性能烂得不行,这次使用XmlDocument类来读取XML字幕 其实根本不用各种扒XML字幕,好吧我这是学习使用XmlDocument类,嗯就是这个样子 ...

随机推荐

  1. .NET面向对象特性之多态

    .NET面向对象特性之多态 前言 上一篇总结了面向对象三大特性之一的继承,再接再厉,这一章继续总结多态.同时把继承中涉及到多态的内容进一步补充扩展.可以说“继承”是多态的根基.但继承主要关注的是“共通 ...

  2. 在 Emacs 中如何退出 Slime Mode

    1.在 Slime 的 Buffer 中按逗号“,”: 2.在 Command 后输入:sayoonara 3.回车,确认. ================ 退出 SBCL 输入:(sb-ext:q ...

  3. .NET PageAdmin CMS

    .NET PageAdmin CMS 完全破解步骤(非简单去版权) 其实当初我的目的是很纯洁的,只是想找一个简单的网站生成模板,由于对.net更熟悉一点,就去搜索了.net框架的CMS,看它的介绍挺强 ...

  4. JS判断字符串是否包含某字符串 indexOf()方法使用

    定义和用法 indexOf()方法可返回某个指定的字符串值在字符串中首次出现的位置. 开始的.如果没有找到子字符串,则返回 -1. 示例: <script type="text/jav ...

  5. Oracle学习的一些建议(转)

    核心提示:学习Oracle是一个漫长艰辛的过程.如果没有兴趣,只是被迫学习,那么是很难学好的.学习到一定程度的时候,要想进一步提高,就不得不接触很多Oracle之外的东西 学习Oracle是一个漫长艰 ...

  6. Java笔记:枚举类

    1.一个类的实例是有限且固定的,这个类称为枚举类.比如季节类,只有四个对象(春.夏.秋.冬) 2.手动实现一个枚举类(1)通过private将构造器隐藏起来(2)把这个类的所有可能实例都使用priva ...

  7. COFF/PE文件结构

    COFF/PE文件结构 原创 C++应用程序在Windows下的编译.链接(二)COFF/PE文件结构 2.1概述 在windows操作系统下,可执行文件的存储格式是PE格式:在Linux操作系统下, ...

  8. Ling to entity实现分页

    Ling to entity实现分页 最近用MVC做的一个项目涉及到分页,中间用了entity framework来查数据库,不用直接写sql语句,方便了很多. 一般分页的思路是获得两个变量的值: 1 ...

  9. 给Activity切换加入动画

    在startActivity或finish()后,调用overridePendingTransition方法,可以加入动画效果.例如: 使用Android自带的淡入淡出:android.R.anim. ...

  10. Javascript 闭包与变量

    1.闭包与变量 JavaScript中的作用域链的机制引出了一个副作用,即闭包只能取得包含函数中任何变量的最后一个值.闭包所保存的是整个变量对象,而不是某个特殊的值. 1 2 3 4 5 6 7 8 ...