注意:新项目推荐 Sqlite ,Access需要注意的东西太多了,比如OFFICE版本,是X86还是X64
连接字符串
Provider=Microsoft.ACE.OleDB.15.0;Data Source="+GetCurrentProjectPath+"\\test.accdb
//不同的office版本 连接字符串有差异
源码下载
注意:.NET CORE下要发布到X86文件夹下
NUGET安装
.NET Framework | .NET CORE & .NET 5 & .NET 6 ....+ |
SqlSugar SqlSugar.Access | SqlSugarCore SqlSugar.AccessCore |
代码
DbType=DbType.Access
//不要使用Any Cpu Office安装的是X86就用X86 和office版本一样
注意:.NET CORE下要发布到X86文件夹下
//程序启动时加入
InstanceFactory.CustomAssemblies =
new System.Reflection.Assembly[] { typeof(AccessProvider).Assembly };
//创建db对象
var db=new SqlSugarClient(new ConnectionConfig()
{
DbType = SqlSugar.DbType.Access,
ConnectionString = Config.ConnectionString,
IsAutoCloseConnection = true
});
//查询表的所有
var list = Db.Queryable<Student>().ToList();
//插入
Db.Insertable(new Student() { SchoolId = 1, Name = "jack" }).ExecuteCommand();
//更新
Db.Updateable(new Student() { Id = 1, SchoolId = 2, Name = "jack2" }).ExecuteCommand();
//删除
Db.Deleteable<Student>().Where(it => it.Id == 1).ExecuteCommand();
Access分页
Access在联表分页 如果存在OrderBy是不支持的
3种解决方案:
1、使用内存分页 .ToList().Skip(1).Take()
2、去掉OrderBy
3、使用子查询 (最新版版本才支持)
三表以上的JOIN操作
默认Access只支持2个表的联表查询,我们可以通过嵌套查询实现3表查询
var getAll = db.Queryable<Order>()
.LeftJoin<Order>((x, y) => x.Id == y.Id)
//可以这儿加Select
.MergeTable()//通过mergetable合并成一个表在进行JOIN
.LeftJoin<Order>((x, y) => x.Id == y.Id)
.ToList();