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

血的教训啊现在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. cocos2d-x C++的do...while(0)另类使用方法

    在C++中,有三种类型的循环语句:for, while, 和do...while, 但是在一般应用中作循环时, 我们可能用for和while要多一些,do...while相对不受重视.      但是 ...

  2. 没有标准化字符串的后果(IOS)

    对于NSString肯定会经常用到,谈谈最近在项目中遇到的一个奇特的现象.如下:我们知道文件系统的命名都是用的字符串,比如你给文件取名“a.pdf”,然后保存文件后,那个文件的名字就真的是 " ...

  3. 微信移动支付V3开发详细教程服务端采用.net mvc webapi(C#)

    转自:http://www.kwstu.com/ArticleView/netmvc_201511132050268716 最近开发手机app需要实现移动支付功能,由于考虑支付安全将微信支付生成签名写 ...

  4. ${pageContext.request.contextPath}的作用

    刚开始不知道是怎么回事,在网上也查找了一些资料,看了还是晕. 看了另一个大侠的,终于有了点眉目. 那位大侠在博客中这样写道“然后在网上找,更让我郁闷的事,TMD!网上“抄袭”的真多啊!而且扯了一大堆! ...

  5. 各种排序方法的JS实现

    各种排序算法的对比总结如下表所示: 冒泡排序: 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完 ...

  6. 软件快速开发平台 WebBuilder 6.8

    WebBuilder是一款开源的跨平台.数据库和浏览器的可视化Web应用快速开发平台.WebBuilder使用了多项最新的技术,使Web应用的开发更快捷和简单. 作为一款高效的Web开发工具,WebB ...

  7. ASP.NET Web API消息处理管道:Self Host下的消息处理管道[下篇]

    ASP.NET Web API消息处理管道:Self Host下的消息处理管道[下篇] 我们知道ASP.NET Web API借助于HttpSelfHostServer以Self Host模式寄宿于当 ...

  8. [置顶] Oracle学习路线与方法

    还没有整理好.... 1.学习路线 Oracle官方文档:2 Day DBA-->2 Day+Performance Tuning Guide--->Administrator's Gui ...

  9. RobHess的SIFT源码分析:综述

    最初的目的是想做全景图像拼接,一开始找了OpenCV中自带的全景拼接的样例,用的是Stitcher类,可以很方便的实现全景拼接,而且效果很好,但是不利于做深入研究. 使用OpenCV中自带的Stitc ...

  10. 【.net 深呼吸】细说CodeDom(9):动态编译

    知道了如果构建代码文档,知道了如何生成代码,那么编译程序集就很简单了. CodeDomProvider 类提供了三个可以执行编译的方法: 1.CompileAssemblyFromSource——这个 ...