【WinForm】使用SQLite数据库创建本地数据库操作文件实现方案详解

2024-01-07 20:32:02

在做编程开发的工作中,创建一个项目WinForm桌面程序,要实现OA系统(自动化办公)类似的程序功能,就要用到的数据库,不用服务器上的,那怎样实现本地管理数据库操作数据处理呢,这里讲一讲怎样使用数据库文件操作,可以移植和备份。

这里使用Visual Studio开发工具,开发WinForm桌面程序项目,在用到本地数据库的时候

安装sqlite-net

选择从NuGet搜索安装包,一个叫sqlite-net程序包,1.0.8版本,安装好,
在这里插入图片描述

注意版本:1.0.8,如果是最新版编译可能会报错,则是项目使用Net框架不是最新引起的

安装后,会看到项目目录下多出了两个文件,如下

  • SQLite.cs
  • SQLiteAsync.cs
  • sqlite3.dll

报错1:无法加载 DLL“sqlite3”: 找不到指定的模块。

这个是缺少的文件sqlite3.dll,需要自己去SQLite官网找,导入到项目文件夹中,将其文件属性设置为复制即可

怎么找文件,如果是Windows系统,那就选:

32位机的sqlite-dll-win-x86-3440200.zip
或者64位机的sqlite-dll-win-x64-3440200.zip

报错2:试图加载格式不正确的程序。

这里是编译目标配置不正确引起的,双击项目属性Properties,生成,目标平台,这里选择对应的x86x64即可

连接本地数据库

写一个操作工具类SQLiteTool ,代码如下

public class SQLiteTool : IDisposable
{
    public readonly SQLiteConnection connect;

    public SQLiteTool(string fileName="data.db")
    {
        var filePath = Path.Combine(Application.StartupPath, fileName);
        connect = new SQLiteConnection(filePath);
    }

    public void Dispose()
    {
        connect.Dispose();
    }
}

传入的参数fileName就是指向本地的数据库文件

使用模板

再写一个模型类Model,用于操作数据库,代码如下

public class Model<T> where T : new()
{
    private readonly string tableName;

    [PrimaryKey, AutoIncrement]
    public int _id { set; get; }

    public DateTime create_date { set; get; }

    public DateTime update_date { set; get; }

    public Model()
    {
        tableName = typeof(T).Name;//.ToLower();//创建的表名对大小写不敏感
        create_date = DateTime.Now;
        update_date = DateTime.Now;
    }

    public static T createModel(SQLiteConnection connect)
    {
        var model = new T();
        var count = connect.CreateTable<T>();
        //if (count > 0) {
        //...
        //}
        return model;
    }

    public T queryInfo(SQLiteConnection connect, int id)
    {
        var list = connect.Query<T>($"select * from {tableName} where _id =? limit 1", id);
        return list.FirstOrDefault<T>();
    }

    public List<T> queryList(SQLiteConnection connect, int maxCount =500)
    {
        return connect.Query<T>($"select * from {tableName} limit ?", maxCount);
    }

    public bool deleteInfo(SQLiteConnection connect, int id)
    {
        var count = connect.Delete<T>(id);
        return count > 0;
    }

    public bool insertInfo(SQLiteConnection connect, T info)
    {
        //info.update_date = DateTime.Now;
        var count = connect.Insert(info);
        return count > 0;
    }

    public bool updateInfo(SQLiteConnection connect, T info)
    {
        var count = connect.Update(info);
        return count > 0;
    }
	//...
}

若提示? T 公共无参数构造函数类型…需要在类名后面添加 <T> where T : new()
写这个类有怎么用呢,可以理解为模板吧

建立数据表

例如,要建立一个数据表,就写一个继承Model的对象类,假设一个对象类名是TestModel,代码如下

public class TestModel : Model<TestModel>
{
    public string name { set; get; }
	//...
}

因为有继承了Model类,所以这里不需要再写继承Model的可访问属性,例如_id…,省了不少代码

操作数据表

一个使用的例子,代码如下

using (var db = new SQLiteTool()) {
	var test = SQLiteTool.Model<SQLiteTool.TestModel>.createModel(db.connect);
	var players = test.queryList(db.connect);
	test.insertInfo(db.connect, new SQLiteTool.TestModel() { name="player"+(players.Count + 1) });
	//...
}

查看数据表

要查看数据,可以借助工具Navicat软件没有的话,自己安装,创建新连接SQLite…,选现有的数据库文件,连接成功,确认即可看到。

写到最后,不再多讲,知道怎么用了吗,还不会的就试试上手 (? ?_?)?

请添加图片描述

文章来源:https://blog.csdn.net/zs1028/article/details/131446484
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。