在PC上开发数据库程序可以算作是非常常见的需求了,简单的数据库用ACCESS就能轻松完成制作,本人之前也一直使用它来做一些小型数据库。然而,不知道是微软本身不够重视还是ACCESS存在某些尚无法很好修复的问题,用其所制作的数据库在使用一段时间后总会出现问题,对于一些场景,这样的问题是致命的,因而毅然决定放弃ACCESS,转投评价更好的SQLite。
由于C++在界面制作和打印输出方面编程比较麻烦,而数据库程序在这两方面的需求却是十分之大的,故而环境选择为“C# + SQLite”,本系列文章记录的是本人用此环境开发数据库所面临的一些问题和解决方法,后续会在开发过程中逐步补充完整,如果有错误之处,也望及时留言指正。
想要了解SQLite数据库,官网是最为直接的途径:http://www.sqlite.org/index.html。而我们第一步要做的,就是去官网的下载页面:http://www.sqlite.org/download.html下载SQLite的动态链接库以供C#调用。这里,我们选择“Precompiled Binaries for .NET”图1,然后选择“Precompiled Binaries for 32-bit Windows (.NET Framework 4.0)”图2,这里这么选是为了兼容性考虑,由于本人也是刚开始使用C#,只知道C#需完全运行在.NET环境下,故而选择了现在使用比较广的4.0版本以避免后续出现的兼容问题,如果有别的需求可以做相应修改。
图1
图2
下载完成之后解压文件夹,里面的“System.Data.SQLite.dll”便是我们需要的动态链接库。下面我们可以新建一个C#的控制台工程,并引用它,具体流程如下:
一.新建控制台工程
二.修改工程解决方案平台为“x86”(VS2015默认为“Any CPU”)
三.添加“System.Data.SQLite.dll”的引用(在解决方案资源管理器的“引用”项处右键,选择“添加引用”,在弹出来的窗体中选择浏览并选中刚刚下载下来的dll便可)
四.选择项目属性,将项目的目标框架改为“.NET Framework 4.0”(这个跟刚刚下载的dll相对应,虽然用更高的版本也可以,但是为了兼容更广还是建议用4.0,不然用户用到才去下载安装会比较烦)
五.添加SQLite和调试相关的命名空间
//使用SQLite的命名空间 using System.Data.SQLite; using System.Data.Common; //使用Debug相关的命名空间 using System.Diagnostics;六.在Main函数里面如下添加代码,即可创建数据库和数据表,并往里面插入3000条数据
//开始计时 Stopwatch watch = new Stopwatch(); watch.Start(); SQLiteConnection conn = null; string dbPath = "Data Source =" + Environment.CurrentDirectory + "/test.db";//数据库文件存放路径 conn = new SQLiteConnection(dbPath);//创建数据库实例,指定文件位置 conn.Open();//打开数据库,若文件不存在会自动创建 string sql = "CREATE TABLE IF NOT EXISTS student(id integer, name varchar(20), sex varchar(2));";//建表语句 SQLiteCommand cmdCreateTable = new SQLiteCommand(sql, conn); cmdCreateTable.ExecuteNonQuery();//如果表不存在,创建数据表 SQLiteCommand cmdInsert = new SQLiteCommand(conn); //大量数据插入时需要注意设置“事务”机制,原因在于,SQLite 默认为每个操作启动一个事务, //那么原代码每次插入遍开启了一个事务,"事务开启 + SQL执行 + 事务关闭"便耗费了大量的时间 //显式只开启一个事务 DbTransaction trans = conn.BeginTransaction();//开始事务 for (int i = 0; i < 1000; i++) { cmdInsert.CommandText = "INSERT INTO student VALUES(1, '小红', '男')";//插入几条数据 cmdInsert.ExecuteNonQuery(); cmdInsert.CommandText = "INSERT INTO student VALUES(2, '小李', '女')"; cmdInsert.ExecuteNonQuery(); cmdInsert.CommandText = "INSERT INTO student VALUES(3, '小明', '男')"; cmdInsert.ExecuteNonQuery(); } trans.Commit();//提交事务 conn.Close(); //计时结束 watch.Stop(); Console.Write("消耗时间:"+(watch.Elapsed).ToString()); Console.ReadKey();到此,最简单的创建数据库和表格并往表格里插入数据的功能都已经实现了,虽然还未涉及复杂的操作,但是已经过了“万事开头难”的苦逼阶段,下面如果有新的操作内容,会在这篇文章里面贴出来。
此外,如果需要查看SQLite数据库里面的内容,推荐使用绿色版的SQLiteBrowser,本人原先在网上下载,后来用着用着忘了出处,故上传上来,下载链接在此。
下面是别的一些功能实现
数据读取:
//开始计时 Stopwatch watch = new Stopwatch(); watch.Start(); SQLiteConnection conn = null; string dbPath = "Data Source =" + Environment.CurrentDirectory + "/test.db";//数据库文件存放路径 conn = new SQLiteConnection(dbPath);//创建数据库实例,指定文件位置 conn.Open();//打开数据库,若文件不存在会自动创建 //数据读取 string sql = "SELECT * FROM student";//查表语句 SQLiteCommand cmdRead = new SQLiteCommand(sql, conn); SQLiteDataReader reader = cmdRead.ExecuteReader(); while (reader.Read()) { Console.WriteLine(reader.GetInt32(0) + " " + reader.GetString(1) + " " + reader.GetString(2)); } //计时结束 watch.Stop(); Console.Write("消耗时间:"+(watch.Elapsed).ToString()); Console.ReadKey();
数据删除:
//删除指定数据 string sql = "DELETE FROM student WHERE id=2";//查表语句 SQLiteCommand cmdDelete = new SQLiteCommand(sql, conn); cmdDelete.ExecuteNonQuery();