c# 中使用sqlite数据库

1 篇文章 0 订阅

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创建的参数。
搜了许多博客,也有说是因为多线程,导致读写出了问题,需要使用锁或者信号量解决,因为我的使用时单线程,所以没法验证。

尊重原创,转载请留链接。

每个人的做法可能不同,但是每个人都成功了,如果我们出错了,请仔细查找自己所执行的步骤。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值