ASP.NET Web API如何通过控制器与URL建立MS Access数据库连接
问题解答
首先明确结论:你现有参考代码的思路不可行
你当前的实现逻辑存在本质错误:UCanAccess驱动仅支持读取本地/挂载磁盘路径下的
.mdb/.accdb文件,无法识别HTTP协议的接口URL,直接把Web API的接口地址填入JDBC连接串无法建立数据库连接。
可行实现方案(推荐)
让ASP.NET Web API服务端直接连接本地存储的MS Access数据库,对外封装数据操作的HTTP接口,Java客户端通过调用接口完成数据读写,无需直接连接数据库。
步骤1:服务端安装依赖
ASP.NET 服务端先安装NuGet包 System.Data.OleDb,用于操作Access数据库。
步骤2:控制器代码示例
[ApiController] [Route("api/[controller]")] public class AccessDataController : ControllerBase { // 本地Access数据库文件路径,建议放到站点App_Data目录下 private readonly string _accessDbPath = @"C:\your-path\data.accdb"; [HttpGet] [Route("GetData")] public IActionResult GetDataFromAccess() { // Access连接串,对应accdb格式,如果是旧版mdb格式可替换为Microsoft.Jet.OLEDB.4.0 string connStr = $"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={_accessDbPath};Persist Security Info=False;"; var resultList = new List<dynamic>(); try { using (var conn = new OleDbConnection(connStr)) { conn.Open(); // 自定义查询SQL,替换为你自己的表名和查询条件 string sql = "SELECT * FROM 你的表名"; using (var cmd = new OleDbCommand(sql, conn)) { using (var reader = cmd.ExecuteReader()) { while (reader.Read()) { resultList.Add(new { // 按你自己的表字段对应映射即可 Id = reader.GetInt32(0), Name = reader.GetString(1) }); } } } } return Ok(resultList); } catch (Exception ex) { return BadRequest($"操作Access出错:{ex.Message}"); } } // 如果确实需要提供整个Access文件下载,可以保留你原来的接口,但仅用于文件下载,不能作为JDBC连接地址 [HttpGet] [Route("DownloadDb")] public PhysicalFileResult DownloadDbFile() { return new PhysicalFileResult(_accessDbPath, "application/msaccess"); } }
步骤3:Java客户端调用示例
不需要再用JDBC驱动,直接发起HTTP请求获取接口返回的JSON数据即可:
import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; public void getAccessData() throws IOException { OkHttpClient client = new OkHttpClient(); String url = "http://localhost:5001/api/AccessData/GetData"; Request request = new Request.Builder().url(url).build(); try (Response response = client.newCall(request).execute()) { String result = response.body().string(); // 解析JSON拿到数据即可 System.out.println(result); } }
注意事项
- MS Access是单文件轻型数据库,不支持高并发访问,仅适合小体量、低并发的本地场景,生产环境建议替换为SQL Server、MySQL等关系型数据库
- 需要给.NET服务运行用户开放Access数据库文件所在目录的读写权限,避免出现权限不足无法打开文件的问题
- 数据库连接要使用
using语法自动释放,避免长时间占用产生文件锁
内容的提问来源于stack exchange,提问作者Ingerten
相关产品推荐
相关产品推荐

