sqlite的简单应用-单线程
Sqlite与环境
对于sqlite的特性不多赘述,可以去搜索相关的博客进行深度研究,我目前也是一知半解会用而已。在这篇博客中,主要介绍一些基础的使用,如有问题,请你在文章末尾指出,我会及时修改的。
我使用的环境是VS2015、.Net Framework4.6创建的是Windows窗体应用程序工程。
- 下载NuGet包
项目->管理NuGet程序包->在浏览中搜索sqlite->下载System.Data.SQLite即可。下载的时候会关联下载三个包System.Data.SQLite和System.Data.SQLite.EF6和System.Data.SQLite.Linq。 - 添加引用
资源管理器->项目中的引用->添加引用->浏览(最近)->选择System.Data.SQLite.dll。我只选择这一个的原因是:在项目中我只涉及到了数据库最基础的增、删、改、查。 - 文件开头记得引用
using System.Data.SQLite
Sqlite函数简介
- SQLiteConnection 用于创建或链接数据库,当数据库不存在时,创建数据库;存在时,连接数据库。
SQLiteConnection cn = new SQLiteConnection(@"data source=test.db;version=3;");
- SQLiteCommand 用于执行SQL命令。
SQLiteCommand SQLiteCmd = new SQLiteCommand()
SQLiteCmd.Connection = SQLiteConn;
SQLiteCmd.CommandText = strsql;
SQLiteCmd.ExecuteReader();
...其他指令...
SQLiteCmd.Dispose();
- SQLiteDataReader 用于保存SELECT的SQL指令的值。
SQLiteDataReader qereader;
...
qereader = SQLiteCmd.ExecuteReader();
while(qereader.Reader())
{...}
具体应用
- 增
bool insertdatatosqlite(string exsql)
{
bool flag = true;
using (SQLiteConnection SQLiteConn = new SQLiteConnection("data source=test64.db"))
{
SQLiteConn.Open();
using (SQLiteCommand SQLiteCmd = new SQLiteCommand())
{
try
{
SQLiteCmd.Connection = SQLiteConn;
SQLiteCmd.CommandText = exsql;
SQLiteCmd.ExecuteNonQuery();
SQLiteCmd.Dispose();//如果忘记这句话,会出现一个叫做database is locked的错误
}
catch (Exception exdbe)
{
Console.WriteLine(exdbe);
flag = false;
}
}
SQLiteConn.Close();//每次使用结束记得释放连接.
}
return flag;
}
- 查
bool QuerydataExist(string strsql,string sname,string sarea)
{
SQLiteDataReader qereader;
bool flag = false;
using (SQLiteConnection SQLiteConn = new SQLiteConnection("data source=test64.db"))
{
SQLiteConn.Open();
using (SQLiteCommand SQLiteCmd = new SQLiteCommand())
{
try
{
SQLiteCmd.Connection = SQLiteConn;
SQLiteCmd.CommandText = strsql;
qereader = SQLiteCmd.ExecuteReader();
while(qereader.Read())
{
if (qereader["modelname"].ToString() == sname && qereader["modelarea"].ToString() == sarea)
{
SQLiteConn.Close();
flag = true;
break;
}
}
SQLiteCmd.Dispose();
}
catch (Exception exdbe)
{
Console.WriteLine(exdbe);
}
}
SQLiteConn.Close();
}
return flag;
}
遇到过的错误
遇到最多的一个错误是:database is locked
这个错误的原因是:在执行完sql语句后,没有使用Dispose释放掉SQLiteCommand创建的参数。
搜了许多博客,也有说是因为多线程,导致读写出了问题,需要使用锁或者信号量解决,因为我的使用时单线程,所以没法验证。
尊重原创,转载请留链接。
每个人的做法可能不同,但是每个人都成功了,如果我们出错了,请仔细查找自己所执行的步骤。