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

血的教训啊现在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. C#socket通信1

    .net平台下C#socket通信(上) 完全是基础,新手可以随意看看,大牛可以关闭浏览页了,哈哈. 在开始介绍socket前先补充补充基础知识,在此基础上理解网络通信才会顺理成章,当然有基础的可以跳 ...

  2. delphi中设置系统时间方法

    procedure TMainFrm.Timer1Timer(Sender: TObject); var   systemtime:Tsystemtime;   dt:TDateTime; begin ...

  3. poj2488骑士之旅

    题目大意:国际象棋里面的马,有那么8种跳法,然后题目给出一个棋盘的大小p*q, 求有没有路线可以使得这个马能把整个棋盘的格全部走一遍,有的话按照字典序将第一条路线打印出来. 注意:国际象棋是行是数字, ...

  4. C++ 动态库导出函数名“乱码”及解决

    C++ 动态库导出函数名“乱码”及解决 刚接触C++,在尝试从 dll 中导出函数时,发现导出的函数名都“乱码”了. 导出过程如下: 新建一个Win32项目: 新建的解决方案里有几个导出的示例: // ...

  5. K-Means算法

    K-Means算法 K-Means算法的输入N,K和一个size为N的向量组vector.输出K个两两互不相交的向量组.其本质是将给定的向量组划分成K个类别,使得同类别的向量相似度比较大,而不同类别的 ...

  6. Winform 让跨线程访问变得更简单

    Winform 让跨线程访问变得更简单 前言 由于多线程可能导致对控件访问的不一致,导致出现问题.C#中默认是要线程安全的,即在访问控件时需要首先判断是否跨线程,如果是跨线程的直接访问,在运行时会抛出 ...

  7. tag标签记录

    看到项目代码中有一个自定义的tag标签,想起以前自己写过的标签,竟然忘记的差不多了,手一痒,自己写个简单的tag标签,回顾一下历史知识 首先建一个servlet工程,然后写个index.jsp,项目跑 ...

  8. [置顶] vs2008 编译adb 支持4.2 android 系统(改进版)

    QQ: 2506314894 本想晚些时候放出来的,但是按捺不住啊,所以修改了之后就立即放出来了.先说明一下,这次用的adb 的源码比较新的,用的vs2008 编译出来,只有一个exe 文件,直接就可 ...

  9. dede搜索引擎

    1.dede模板中的html: <form action="{dede:fieldname='phpurl'/}/search.php" name="formsea ...

  10. 排序算法用C++的基本算法实现十个数排序

    本文个人在青岛喝咖啡的时候突然想到的...近期就有想写几篇关于排序算法的文章,所以回家到之后就奋笔疾书的写出来发布了 冒泡排序法 道理: 它重复地访问过要排序的数列,一次比较两个元素,如果他们的顺序错 ...