在.NET Core 2 MVC中使用ODP.NET Beta驱动连接Oracle遇阻求助
我之前也碰到过几乎一模一样的问题,折腾了好一阵才搞定,给你整理下我成功的步骤和代码,应该能帮到你:
解决ODP.NET Core 2 Beta版在MVC项目中的运行问题
第一步:先确认你装对了NuGet包
别直接搜Oracle.ManagedDataAccess.Client!针对.NET Core的Beta版驱动是**Oracle.ManagedDataAccess.Core**(带Core后缀),而且要指定对应.NET Core 2的版本——当时的Beta版是2.12.0-beta1,你大概率是装错包了才会出一堆DLL错误。
打开终端,在项目根目录执行:
dotnet add package Oracle.ManagedDataAccess.Core --version 2.12.0-beta1
第二步:修复项目配置细节
- 配置连接字符串(
appsettings.json):
注意格式,Data Source要加//开头,用服务名不是SID,别搞混:
"ConnectionStrings": { "OracleDb": "User Id=你的数据库用户名;Password=你的密码;Data Source=//数据库IP:端口/服务名;" }
- 配置依赖注入(
Startup.cs):
在ConfigureServices方法里加入这段,方便在Controller里直接注入连接:
services.AddScoped<IDbConnection>(sp => { var config = sp.GetRequiredService<IConfiguration>(); var connStr = config.GetConnectionString("OracleDb"); return new OracleConnection(connStr); });
第三步:可运行的测试代码
给你一个简单的HomeController测试示例,用来验证连接是否正常:
using System.Data; using Oracle.ManagedDataAccess.Client; using Microsoft.AspNetCore.Mvc; namespace YourMvcProject.Controllers { public class HomeController : Controller { private readonly IDbConnection _oracleConn; // 通过构造函数注入连接 public HomeController(IDbConnection oracleConn) { _oracleConn = oracleConn; } public IActionResult OracleTest() { string resultMsg = ""; try { _oracleConn.Open(); using var cmd = _oracleConn.CreateCommand(); cmd.CommandText = "SELECT SYSDATE FROM DUAL"; var dbDate = cmd.ExecuteScalar(); resultMsg = $"🎉 Oracle连接成功!当前数据库时间:{dbDate}"; } catch (OracleException ex) { resultMsg = $"❌ 连接失败:{ex.Message}"; } finally { _oracleConn.Close(); } return Content(resultMsg); } } }
第四步:排查常见坑
- 编辑器假报错:VS Code的IntelliSense有时候会抽风,明明包装对了还报红,别管它,先执行
dotnet build和dotnet run看实际运行结果。 - 目标框架检查:确认
.csproj里的目标框架是netcoreapp2.0,别写成net2.0(那是.NET Framework):
<TargetFramework>netcoreapp2.0</TargetFramework>
- 网络与权限:先telnet测试数据库IP和端口能不能通,再确认你的数据库用户有足够的查询权限。
最后验证
运行dotnet run,访问https://localhost:5001/Home/OracleTest(换成你项目的实际端口),如果看到数据库时间,就说明成功了!
内容的提问来源于stack exchange,提问作者lat94
相关产品推荐
相关产品推荐

