在做编程开发的工作中,创建一个项目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
,生成,目标平台,这里选择对应的x86
或x64
即可
连接本地数据库
写一个操作工具类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…,选现有的数据库文件,连接成功,确认即可看到。
写到最后,不再多讲,知道怎么用了吗,还不会的就试试上手 (ง •_•)ง