从零开始用C#做产品:私人日记(12)SQLite入门

本节开始,我们将涉入一个重要的内容,数据库编程。上节我们做了一个简短的数据库选型分析,确定了我们的数据库使用SQLite,下面再来补充介绍下:

SQL是Structured Query Language的缩写,结构化查询语言,主要用于数据库查询。

lite在英文中的意思是简化的、缩水的。

看名字大家也就知道了,这并不是一个很NB的数据库。那为什么要用它呢?

优点如下:

对我们这个小项目来说,足够了。

我们先借助一款工具来认识下SQLite,这个工具的名字叫SQLite Studio,是一款开源软件,下载地址我在文章下方有说明。


一、创建数据库

对SQLite Studio的操作我就直接上动图了,大家对照操作就好。

从零开始用C#做产品:私人日记(12)SQLite入门

数据库的创建位置需要说明下,以免后面有同学跟不上节奏。我是直接创建到了程序运行的Debug目录下。大家也可以创建到其它位置,然后复制过去,以后再使用打开相应位置的数据库,效果都一样。


二、创建表

关系型数据库的数据层次结构分三层:一个数据库中可以建多个表,每个表可以建多个数据类型字段。

数据库表跟程序中类的层次有些类似,字段则跟类中类变量的层次有些类似。

那我们现在需要创建一个分类数据的表,对应的就是Model.Category中的内容,这个我们之前都分析过了,现在直接参考此类建表。

从零开始用C#做产品:私人日记(12)SQLite入门

与其他数据库不同的是,SQLite对数据的类型约束不是强制的,最终存储到数据文件中的,只有5种基本的数据类型:

从零开始用C#做产品:私人日记(12)SQLite入门

上面的表说明了声明类型与基本类型的对照关系,声明可以有很多种,最终数据库存储的只有5种形式。

比如我声明了一个字段为VCHAR(128),在SQLServer中,那字段就不可能超过128个,而在SQLite中,是可以的,因为声明只是给程序员看的,它仅仅是个说明,最终存储的都是TEXT。

以上大家可以先了解下,有个印象。以后我们如果切换到其它数据库,如果发现同样的字段定义,有些值在SQLite中可以插入,在SQLServer中却报错,为什么呢?想想这部分内容就大概明白了。

好,现在一个定义了Category表的数据库已经建好了。那我们在程序中要怎么操作它呢?

.net集成了很多系统的类库给我们使用,但程序要求是多样的,系统给我们提供的也无法满足我们的要求。我们要想在C#中使用它,就需要用到它开发好的类库,我们一般把非系统提供的类库成为第三方类库。所以之前的教程记得有人留言说介绍下第三方类库的使用,现在可以关注了。

SQLite的.net类库,最初不是微软开发的,是专门有个团队在做的,有兴趣的同学可以百度去他们官网查阅。

从零开始用C#做产品:私人日记(12)SQLite入门

然而微软框架太混乱了.net Framework从2.0到4.7,然后又是.net core2.0-3.0,到现在.net 5,为了适应微软的这些框架,sqlite出了很多版本,而且还要考虑32位、64位以及托管非托管等等,使得开发者经常会无所适从,这其实不怪sqlite,原因还是在微软。不过好在微软近几年放弃了固守自己的地盘,大力发展开源、跨平台,从.net core以后,微软为了统一Sqlite的操作方式,自己开发了一套专门用于.net的sqlite,这使得sqlite使用起来方便了很多。

下面我们就用微软的sqlite库来操作sqlite数据库。


一、添加Sqlite类库

以前使用第三方类库,我们都是到它的官网直接下载匹配的版本,然后再自己添加。现在我们有了新的选择,使用NuGet包管理器。这点也是微软的一大创举,使用起来就像是手机里的应用商店,想要什么库搜一下,然后安装就好了。

进入方法:打开VS,菜单->NuGet包管理器->管理解决方案的NuGet程序包

从零开始用C#做产品:私人日记(12)SQLite入门

弹出NuGet界面,在搜索框中我们填入sqlite,就会发现Microsft.Data.Sqlite.Core,选中它,然后再右侧的Diary.Win中勾选,再点安装。

从零开始用C#做产品:私人日记(12)SQLite入门

安装过程中可能会弹出确认对话框框,都开绿灯。

从零开始用C#做产品:私人日记(12)SQLite入门

安装之后,我们可以在解决方案看到

从零开始用C#做产品:私人日记(12)SQLite入门

这样就是安装好了,也直接添加了引用。


二、调用Sqlite类库

我们需要先测试下类库和数据库是否能够正常运行,期望在程序打开时就判断一下数据库是否正常,所以在MainForm中添加Load事件:

从零开始用C#做产品:私人日记(12)SQLite入门

然后添加如下代码:

private void MainForm_Load(object sender, EventArgs e)
{
try
{
string filepath = string.Format("{0}Diray.db", Application.StartupPath);
if (!System.IO.File.Exists(filepath))
{
MessageBox.Show("数据库文件不存在");
}
string connstring = string.Format("Data Source={0};", filepath);
Microsoft.Data.Sqlite.SqliteConnection conn = new Microsoft.Data.Sqlite.SqliteConnection(connstring);
conn.Open();
if (conn.State == System.Data.ConnectionState.Open)
{
MessageBox.Show("数据库连接测试成功");
conn.Close();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}

这里有些新知识了,逐行讲解下:

try
{
//...
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}

这个try...catch学过C/C++的应该不陌生,异常捕获。通俗的解释,就是正常情况下肯定是按代码逻辑走的,但是凡事不怕一万就怕万一,万一有异常情况,我先把它截获,保证程序不会直接爆掉。生活中我们也经常看到这样的事情,成年人的崩溃就在那一瞬间,我们虽然不能提前预知何时会发生、发生的原因是什么?但不管是啥,心态别崩,先稳住情绪,然后我们再看情况处理,然后查漏补缺,避免此类情况再次发生。

string filepath = string.Format("{0}Diray.db", Application.StartupPath);

String.Format是C#编程中常用的方法,作用是组合字符串,它支持可变参数。第一个参数是字符串的格式,{0}表示第一个参数,{1}表示第二个参数...以此类推,后面就是跟了一堆的参数。

Application.StartupPath这个表示的是程序的启动目录。前面在创建数据库的时候我把数据库文件Diary.db保存到了程序的根目录下,这个Application.StartupPath代表的就是程序根目录,跟文件名字符串一结合,就得到了数据库文件的全路径。

string connstring = string.Format("Data Source={0};", filepath);

这个connstring 就是数据库连接字串,每个数据库都有自己的方式来连接,按要求做就好。也是字符串的拼接。

Microsoft.Data.Sqlite.SqliteConnection conn = new Microsoft.Data.Sqlite.SqliteConnection(connstring);
conn.Open();

用指定的连接符创建一个Sqlite的实例,然后打开数据库。这里是最容易触发异常的地方。

if (conn.State == System.Data.ConnectionState.Open)
{
MessageBox.Show("数据库连接测试成功");
conn.Close();
}

如果数据库是打开状态,说明一切正常,然后关闭数据库。

编译通过后我们尝试运行,结果真的发生了异常,被我们捕获了。

从零开始用C#做产品:私人日记(12)SQLite入门

我们调试发现,是在conn.Open时发生的。说实话,我也是第一次用Microsoft的sqlite,这种情况我也没见过,不过遇到问题别慌,先百度查资料,基本上我们遇到的问题都是很多人曾经遇到过的。

查下来知道了,原来是我们还少添加了一个类库:Microsoft.EntityFrameworkCore.Sqlite。于是再次打开Nuget,搜索sqlite,找到Microsoft.EntityFrameworkCore.Sqlite。

这里需要特别提醒的是关于sqlite,在Nuget管理器中可以看到很多名字类似的库,同学们一定要瞪大眼睛,一个字都不能差,不然就会得到各种各样的错误。

从零开始用C#做产品:私人日记(12)SQLite入门

继续安装

从零开始用C#做产品:私人日记(12)SQLite入门

包变成了两个,这时再运行,测试通过。

从零开始用C#做产品:私人日记(12)SQLite入门

那么接下来如何来做数据库的增删改查呢?我们下节继续。

----------------------------------------------------

本教程尽量保证2天一更,项目源码已作为开源项目加入到Git,代码内容会随教程实时更新,大家有兴趣的话可以关注我,以获得最及时的更新。私信:

私人日记 可以获取Git的链接;sqlitestudio可以获取sqlitestudio的链接;

C#基本语法大家在头条搜索“菜鸟c#”,个人感觉这个网站还可以。

大家阅读过程中有哪些看不懂或未尽兴的地方,可以在评论区留言,我会先记下来在后续的教程中找机会再说。

教程有帮助的话请大家帮忙关注、转发、扩散,能不能开专栏还需要你们的支持!

展开阅读全文

页面更新:2024-03-12

标签:微软   字段   字符串   数据库连接   入门   异常   私人   声明   参数   发生   操作   数据库   测试   程序   教程   日记   内容   数据   产品   科技

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top