Linux平台下使用.NET Core访问Access数据库
运行环境
- 操作系统:
Ubuntu 22.04.3 LTS (Jammy) - 开发工具:
Visual Studio 2022 (17.8.0) - 运行时版本:
.NET Runtime 8.0 - 依赖库:
unixodbc、mdbtools、odbc-mdbtools
依赖库安装
apt-get update
sudo apt-get install unixodbc mdbtools odbc-mdbtools
依赖库版本信息
- apt list --installed | grep odbc
libodbc1/jammy,now 2.3.9-5 amd64 [installed,automatic]
libodbc2/jammy,now 2.3.9-5 amd64 [installed,automatic]
libodbccr2/jammy,now 2.3.9-5 amd64 [installed,automatic]
libodbcinst2/jammy,now 2.3.9-5 amd64 [installed,automatic]
odbc-mdbtools/jammy,now 1.0.0+dfsg-1 amd64 [installed]
odbcinst1debian2/jammy,now 2.3.9-5 amd64 [installed,automatic]
odbcinst/jammy,now 2.3.9-5 amd64 [installed,automatic]
unixodbc-common/jammy,now 2.3.9-5 all [installed,automatic]
unixodbc/jammy,now 2.3.9-5 amd64 [installed]
- apt list --installed | grep mdb
liblmdb0/jammy,now 0.9.24-1build2 amd64 [installed,automatic]
libmdb3/jammy,now 1.0.0+dfsg-1 amd64 [installed,automatic]
libmdbsql3/jammy,now 1.0.0+dfsg-1 amd64 [installed,automatic]
mdbtools/jammy,now 1.0.0+dfsg-1 amd64 [installed]
odbc-mdbtools/jammy,now 1.0.0+dfsg-1 amd64 [installed]
Linux平台 下的 ODBC 配置
- /etc/odbc.ini
[access_db] # 随意命名,会在项目代码里用到它
Description=Microsoft Access Database
Driver=MDBW
ServerName = localhost
Database=/root/Database1.mdb # 按你的实际路径改写,要有读写权限
- /etc/odbcinst.ini
[MDBW] # 随意,在odbc.ini文件用到它
Description=MDBTools Driver Wide # 随意
Driver=/usr/lib/x86_64-linux-gnu/odbc/libmdbodbcW.so # 按你的实际路径改写
Setup=/usr/lib/x86_64-linux-gnu/odbc/libmdbodbcW.so # 按你的实际路径改写
FileUsage=1
UsageCount=1
[MDBTools]
Description=MDBTools Driver # 随意
Driver=/usr/lib/x86_64-linux-gnu/odbc/libmdbodbc.so # 按你的实际路径改写
Setup=/usr/lib/x86_64-linux-gnu/odbc/libmdbodbc.so # 按你的实际路径改写
FileUsage=1
UsageCount=1
[ODBC]
Trace=1
TraceFile=/tmp/mdb.log # 有写入权限的文件路径
Demo 项目代码
输出:
UserName: Allen
UserName: Joy
编译和发布
在 OdbcForLinuxTestApp 目录下,执行命令:
dotnet publish -c Release -f net8.0 -r win-x64 -o ./publish/win-x64 # 如果只考虑 Linux平台,该命令可忽略
dotnet publish -c Release -f net8.0 -r linux-x64 -o ./publish/linux-x64
运行 OdbcForLinuxTestApp
注意:
Database1.mdb数据库文件需要提前放到正确的路径,以odbc.ini文件的Database配置项为准。
cd ./publish/linux-x64
chmod +x OdbcForLinuxTestApp # 授予可执行权限
./OdbcForLinuxTestApp
BASH 复制 全屏
- Program.cs
using System.Data; using System.Data.Common; using System.Data.Odbc; using System.Data.OleDb;namespace OdbcForLinuxTestApp;internal sealed class Program {static async Task Main(string[] args){string connectionStrings;if (OperatingSystem.IsWindows()){string mdbFile = Path.Combine(AppContext.BaseDirectory, "Database1.mdb");connectionStrings = $"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={mdbFile}";}else{//root/Database1.mdbconnectionStrings = "DSN=access_db;";}await using (DbConnection conn = GetDbConnection(connectionStrings)){await conn.OpenAsync();DbCommand cmd = conn.CreateCommand();cmd.CommandType = CommandType.Text;cmd.CommandText = "select [ID],[UserName] from Users";DbDataReader reader = await cmd.ExecuteReaderAsync();while (await reader.ReadAsync()){//The MDBTools does not support the use of column namesstring userName = reader.GetString(1);Console.WriteLine("UserName: " + userName);}}}private static string DbProviderName => OperatingSystem.IsWindows() ? "System.Data.OleDb" : "System.Data.Odbc";private static DbConnection GetDbConnection(string connectionStrings){RegisterOdbcOrOleDbFactory();DbProviderFactory dbFactory = DbProviderFactories.GetFactory(DbProviderName);DbConnection? conn = dbFactory.CreateConnection();if (conn == null){return OperatingSystem.IsWindows() ? new OleDbConnection(connectionStrings) : new OdbcConnection(connectionStrings);}conn.ConnectionString = connectionStrings;return conn;}private static int _isRegisteredDbFactory;private static void RegisterOdbcOrOleDbFactory(){if (Interlocked.CompareExchange(ref _isRegisteredDbFactory, 1, 0) == 0){string dbProviderName = DbProviderName;IEnumerable<string> providerInvariantNames = DbProviderFactories.GetProviderInvariantNames();string? invariantName = providerInvariantNames.FirstOrDefault(x => x.Equals(dbProviderName, StringComparison.InvariantCultureIgnoreCase));if (string.IsNullOrWhiteSpace(invariantName)){DbProviderFactories.RegisterFactory(dbProviderName, OdbcFactory.Instance);}}} }编译和发布 Demo 项目代码
准备工作
- 创建
OdbcForLinuxTestApp目录 - 将上述两个代码文件放入
OdbcForLinuxTestApp目录 - 安装
.NET SDK 8.0.100
相关文章:
Linux平台下使用.NET Core访问Access数据库
运行环境 操作系统:Ubuntu 22.04.3 LTS (Jammy)开发工具:Visual Studio 2022 (17.8.0)运行时版本:.NET Runtime 8.0依赖库:unixodbc、mdbtools、odbc-mdbtools 依赖库安装 apt-get update sudo apt-get install unixodbc mdbto…...
SpringCloud - 新版淘汰 Ribbon,在 OpenFeign 中整合 LoadBalancer 负载均衡
目录 一、LoadBalancer 负载均衡 1.1、前言 1.2、LoadBalancer 负载均衡底层实现原理 二、整合 OpenFeign LoadBalancer 2.1、所需依赖 2.2、具体实现 2.3、自定义负载均衡策略 一、LoadBalancer 负载均衡 1.1、前言 在 2020 年以前的 SpringCloud 采用 Ribbon 作为负载…...
[MySQL-基础]SQL语句
目录 hello! 这里是欧_aita的频道。 今日语录: 只有放弃才是真正的失败。 祝福语:愿你的代码生活充满注释,逻辑清晰,debug之路畅通无阻。 大家可以在评论区畅所欲言,可以指出我的错误,在交流中共同进步。 欢迎关注我的…...
CentOS 7实现类似于Kali Linux中的自动补全功能
在CentOS 7中,可以通过安装和使用Bash-completion来实现自动补全功能,类似于Kali Linux中的自动补全。以下是安装和使用Bash-completion的步骤: 首先,确保您的系统已更新并安装了EPEL存储库。(非必要,直接…...
skywalking中gateway的拓扑图没有出现
背景: 刚开始的时候gateway没有出现,后来百度说添加插件的jar包, apm-spring-cloud-gateway-2.1.x-plugin-8.15.0.jar apm-spring-webflux-5.x-plugin-8.15.0.jar 然后解决了gateway节点出来了, 但是:拓扑图却是User指…...
【前端学java】java中的日期操作(12)
往期回顾: 【前端学java】JAVA开发的依赖安装与环境配置 (0)【前端学 java】java的基础语法(1)【前端学java】JAVA中的packge与import(2)【前端学java】面向对象编程基础-类的使用 (…...
用eclipse搭建简单的JavaWeb环境
在 Eclipse 中搭建 JavaWeb 项目的环境涉及到配置服务器、创建项目、添加库等步骤。以下是基于 Eclipse 的 JavaWeb 项目搭建的简要步骤: 步骤: 1. 安装 Eclipse IDE for Java EE Developers 确保你已经安装了 Eclipse IDE for Java EE Developers 版…...
【精选】改进的YOLOv5:红外遥感图像微型目标的高效识别系统
1.研究背景与意义 随着科技的不断发展,红外遥感技术在军事、安防、环境监测等领域中得到了广泛应用。红外遥感图像具有独特的优势,可以在夜间或恶劣天气条件下获取目标信息,因此在小目标检测方面具有重要的应用价值。然而,由于红…...
HarmonyOS ArkTS语言,运行Hello World(一)
一、下载与安装DevEco Studio 在HarmonyOS应用开发学习之前,需要进行一些准备工作,首先需要完成开发工具DevEco Studio的下载与安装以及环境配置。 进入DevEco Studio下载官网,单击“立即下载”进入下载页面。 DevEco Studio提供了Windows…...
IDEA中注释快捷键及模板
单行注释 将光标放置于要注释所在行,使用 Ctrl /, 添加行注释,再次使用,去掉行注释 若需要将多行进行单行注释,只需要选中要注释的多行,然后使用 Ctrl /, 添加行注释,再次使用&a…...
centos7系统下postgresql15离线安装,卸载
1. 创建postgres用户 #[rootVMTest postgresql16]# useradd -g postgres postgres [rootVMTest postgresql16]# useradd postgres 插曲:在线YUM安装 在线安装参考: PostgreSQL: Linux downloads (Red Hat family) 2. 下载并安装离线rpm包 2.1 从postgresql官网下…...
C#线程 ConcurrentQueue安全队列介绍
https://blog.csdn.net/qq_41230604/article/details/126305068 C#线程安全队列ConcurrentQueue ConcurrentQueue队列是一个高效的线程安全的队列,是Net Framework 4.0,System.Collections.Concurrent命名空间下的一个数据结构。 ConcurrentQueue内部结…...
CURL踩坑记录
因为项目使用的windows server,且没有安装Postman,所以对于在本地的Postman上执行的请求,要拷贝到服务器执行,只能先转化成为curl命令,操作也很简单,如下: 注意,Postman默认对url包围…...
Python 自动化(十八)admin后台管理
admin后台管理 什么是admin后台管理 django提供了比较完善的后台数据库的接口,可供开发过程中调用和测试使用 django会搜集所有已注册的模型类,为这些模型类提供数据管理界面,供开发使用 admin配置步骤 创建后台管理账号 该账号为管理后…...
Navicat 技术指引 | 适用于 GaussDB 的自动运行功能
Navicat Premium(16.2.8 Windows版或以上) 已支持对 GaussDB 主备版的管理和开发功能。它不仅具备轻松、便捷的可视化数据查看和编辑功能,还提供强大的高阶功能(如模型、结构同步、协同合作、数据迁移等),这…...
MySQL 的执行原理(四)
5.5. MySQL 的查询重写规则 对于一些执行起来十分耗费性能的语句,MySQL 还是依据一些规则,竭尽全力的把这个很糟糕的语句转换成某种可以比较高效执行的形式,这个过程也可以 被称作查询重写。 5.5.1. 条件化简 我们编写的查询语句的搜索条件…...
PHP 正则式 全能匹配URL(UBB)
PHP 正则式 全能匹配URL(UBB) 语言:PHP 注明:正则式 无语言限制(js、PHP、JSP、ASP、VB、.net、C#...)一切皆可。 简介:PHP UBB 正则式 全能匹配URL 自动加超级链接。网上找了很多都不匹配或…...
hadoop shell操作 hdfs处理文件命令 hdfs上传命令 hadoop fs -put命令hadoop fs相关命令 hadoop(十三)
hadoop fs -help rm 查看rm命令作用 hadoop fs 查看命令 1. 创建文件夹: # hdfs前缀也是可以的。更推荐hadoop hadoop fs -mkdir /sanguo 2.上传至hdfs命令: 作用: 从本地上传hdfs系统 (本地文件被剪切走,不存在了&…...
redis-cluster集群
1.redis-cluster集群 redis3.0引入的分布式存储方案 集群由多个node节点组成,redis数据分布在这些节点之中。 在集群之中分为主节点和从节点 集群模式当中,主从一一对应,数据写入和读取与主从模式一样,主负责写,从…...
Hfish安全蜜罐部署
一、Hfish蜜罐介绍 HFish蜜罐官网 HFish是一款社区型免费蜜罐,侧重企业安全场景,从内网失陷检测、外网威胁感知、威胁情报生产三个场景出发,为用户提供可独立操作且实用的功能,通过安全、敏捷、可靠的中低交互蜜罐增加用户在失陷…...
2025终极身份验证指南:双因素认证如何保护80%账户免遭入侵
2025终极身份验证指南:双因素认证如何保护80%账户免遭入侵 【免费下载链接】Back-End-Developer-Interview-Questions A list of back-end related questions you can be inspired from to interview potential candidates, test yourself or completely ignore 项…...
手机端实时低光增强:手把手部署CVPR2020的ZeroDCE模型到Android (附TensorFlow Lite转换教程)
手机端实时低光增强:ZeroDCE模型在Android端的完整部署指南 从实验室到口袋:为什么选择ZeroDCE 深夜街头抓拍、昏暗餐厅记录美食、逆光环境下的自拍——这些场景对手机摄影始终是巨大挑战。传统图像处理方案要么效果生硬,要么计算复杂难以实时…...
Hitboxer终极指南:如何彻底解决游戏键盘输入冲突问题
Hitboxer终极指南:如何彻底解决游戏键盘输入冲突问题 【免费下载链接】socd Key remapper for epic gamers 项目地址: https://gitcode.com/gh_mirrors/so/socd 在竞技游戏的激烈对抗中,你是否曾因键盘输入冲突而错失关键操作?当同时按…...
Flash游戏重生指南:CefFlashBrowser让你的经典游戏永不消失
Flash游戏重生指南:CefFlashBrowser让你的经典游戏永不消失 【免费下载链接】CefFlashBrowser Flash浏览器 / Flash Browser 项目地址: https://gitcode.com/gh_mirrors/ce/CefFlashBrowser 在Flash技术正式退役后,无数经典网页游戏和互动内容面临…...
Kubernetes集群基石:保姆级Containerd配置与CNI网络插件集成指南(含一键脚本)
Kubernetes集群基石:保姆级Containerd配置与CNI网络插件集成指南 1. 为什么选择Containerd作为Kubernetes容器运行时? 在构建生产级Kubernetes集群时,容器运行时的选择直接影响集群的稳定性和性能。作为CNCF毕业项目,Containerd以…...
阿里云国际站代理商(云老大):阿里云国际站无影云电脑使用指南
阿里云国际站无影云电脑使用指南 前面我们说过:有好多客户咨询香港阿里云国际站云代理商云老大,如何注册阿里云国际站香港账号开通香港无影云电脑产品进行使用的教程,今天来和大家一起聊聊,如何从阿里云国际站注册到开通香港无影…...
工业虚拟仿真系统有哪些?
近年来,国家持续加码数字工业建设,多项重磅政策推动虚拟现实、数字孪生、虚拟仿真技术与制造业深度融合。《“十四五”数字经济发展规划》《虚拟现实与行业应用融合发展行动计划(2022—2026年)》等文件明确指出,要加速虚拟仿真技术在工业研发…...
如何将多时间点影像组学特征与肿瘤细胞死亡与微环境重塑建立关联,并进一步解释其与主要病理缓解(MPR)及长期生存预后的机制联系
01导语各位同学,大家好。现在做影像组学,如果还只停留在“提取特征—建个模型—算个AUC”,那就有点像算命算得挺准,但为啥准,自己也说不明白。别人一问:你这特征到底代表啥?背后有啥道理&#x…...
终极指南:Laravel如何无缝连接PHP与JavaScript构建高效前后端交互
终极指南:Laravel如何无缝连接PHP与JavaScript构建高效前后端交互 【免费下载链接】framework Laravel is a web application framework with expressive, elegant syntax. 项目地址: https://gitcode.com/GitHub_Trending/fr/framework Laravel是一款拥有简…...
终极GStreamer安全指南:防范多媒体处理中的25个致命风险
终极GStreamer安全指南:防范多媒体处理中的25个致命风险 【免费下载链接】gstreamer GStreamer open-source multimedia framework 项目地址: https://gitcode.com/gh_mirrors/gs/gstreamer GStreamer作为开源多媒体框架,广泛应用于视频播放、直播…...
