1. 错误信息
解决错误信息:找不到请求的 .Net Framework Data Provider。可能没有安装
1.1. 错误详情
“/”应用程序中的服务器错误
找不到请求的 .Net Framework Data Provider。可能没有安装。
说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.ArgumentException: 找不到请求的 .Net Framework Data Provider。可能没有安装。
源错误:
1 | 行 3216: |
源文件: D:\\Portal-VS2013-NC\\Portal-VS2013-NC\\DataAccess\\Bom\\DASOBom.cs
行: 3218
堆栈跟踪:
1 | [ArgumentException: 找不到请求的 .Net Framework Data Provider。可能没有安装。] |
版本信息: Microsoft .NET Framework 版本:4.0.30319; ASP.NET 版本:4.8.4494.0
2. 问题原因
出现此错误的原因是:Oracle数据库的ODP.NET驱动没有安装。
ps:
首先考虑 ODP.NET 是否安装成功的,其次,考虑x86/x64的原因,您的项目的build target(x86/x64)设定要与本机安装的ODP.NET的驱动版本(x86/x64)要一致。
3. 查看与设置ORACLE_HOME环境变量
查看设置的环境变量是否正确: echo %ORACLE_HOME%
1 | D:\Downloads\压缩文件\ODP.NET_Managed_ODAC122cR1_3>echo %ORACLE_HOME% |
若没有定义,去系统环境变量中添加,D:\app\R00004050\product\11.2.0\client_1
3.1. Windows下查看与设置环境变量
使用命令或在系统环境变量中设置 ORACLE_HOME
环境变量。
命令设置方式参考:
Windows10通过cmd命令行添加环境变量_code_god_1024的博客-CSDN博客_命令行添加环境变量
4. 下载与安装ODP.NET驱动
.Net应用程序与ODP.Net处理器类型保持一致。
查看web.config
文件
1 | <TargetFrameworkVersion>v4.0</TargetFrameworkVersion> |
我是32位x86版本,.Net Framework 4.0, 所以下载32位版ODP.NET
。
下载地址(总揽):
http://www.oracle.com/technetwork/topics/dotnet/downloads/index.html
64位ODP.Net下载地址:
http://www.oracle.com/technetwork/database/windows/downloads/index-090165.html
32位ODP.Net下载地址:
http://www.oracle.com/technetwork/database/windows/downloads/utilsoft-087491.html
注意下载的时候,跟你的数据库版本保持一致.
下载解压后,打开文件 readme.htm
查看安装方法(管理员模式CMD命令安装)。
CMD(管理员模式打开),cd
进入ODP.NET
解压目录(如果解压目录在D盘,需要先输入D:\
进入D盘,再输入cd D:\你的解压目录\
):
1 | D:\ |
使用命令安装完成后,查看是否生成节点信息:在对应的.NetFramework版本下查看 machine.config
里面的<system.data><DbProviderFactories>
节点。
我的文件在:C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.config
,如下图:
生成的节点信息:
1 | <system.data> |
至此,驱动应该安装完成了。这个错误也解决了。下面的错误和ODP.NET驱动实际上没关系。
5. Oracle数据库连接配置
安装ODP.NET后重启应用
“/”应用程序中的服务器错误
ORA-01017: invalid username/password; logon denied
说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: Oracle.ManagedDataAccess.Client.OracleException: ORA-01017: invalid username/password; logon denied
源错误:
1 |
|
源文件: D:\Portal-VS2013-NC\Portal-VS2013-NC\DataAccess\Bom\DASOBom.cs 行: 3218
堆栈跟踪:
1 | [OracleException (0x80004005): ORA-01017: invalid username/password; logon denied] |
5.1. 分析与解决错误
出现此错误,说明前面安装Oracle连接驱动正常,但是连接配置有问题,所以报用户名密码无效。
查看源码中_ncdataEntities
对象在初始化时所使用的连接字符串NCDATAEntities
在app.config
中的配置内容:
1 | <add name="NCDATAEntities" connectionString="metadata=res://*/NCDATAModel.csdl|res://*/NCDATAModel.ssdl|res://*/NCDATAModel.msl;provider=Oracle.ManagedDataAccess.Client;provider connection string="data source=ORCL;password=******;user id=NCDB"" |
这是一种连接字符串的写法,Oracle 对 微软 实体框架 EF6 的支持,在 ODP.NET 的新版本中才有实现。
关注这里的 data source
, password
, user id
几个关键属性。我们的报错信息 Oracle.ManagedDataAccess.Client.OracleException: ORA-01017: invalid username/password; logon denied
主要和这几个参数配置有关。
5.1.1. 先了解下 oracle tnsnames.ora
文件用法
5.1.1.1. 1.用途
Oracle客户端所需要的一个文件,通过该文件可以配置数据库的连接地址,配好后,Oracle地址了,直接用简易的字符串代替。
如:本该是数据库地址为:127.0.0.1:1521/orcl
,通过设置tnsnames.ora
,为它起的别名为:dataBaseAddr
,就可以用 dataBaseAddr
代替了。
5.1.1.2. 2.用法
用以管理员方式运行文本编辑器,打开Oracle客户端目录的D:\app\R00004050\product\11.2.0\client_1\network\admin\tnsnames.ora
文件,内容如下:
1 | ORCL = |
在我们的项目中的连接字符串所设置的data source=ORCL
属性,这里的ORCL
就是tnsnames.ora
文件中所配置的别名 ORCL = (...)
。
5.2. 解决方法
解决方法:检查项目 app.config
的 user id
, password
以及这里tnsnames.ora
文件的 HOST
,PORT
是否正确。
本例中 HOST 地址配置错误,使用了测试环境 Oracle 的 IP 地址,所以将 HOST
改为生产环境 IP 地址后 Oracle 数据库连接正确。
参考文章:
- 错误:找不到请求的 .Net Framework Data Provider。可能没有安装.
- .net中使用ODP.net访问Oracle数据库(无客户端部署方法)_iteyer的技术博客_51CTO博客
- 找不到请求的 .Net Framework Data Provider。可能没有安装。
- oracle tnsnames.ora文件用法说明
- Oracle Data Provider for .NET(C# 版)入门
- ODP.NET_风神修罗使的博客-CSDN博客
- Installing Oracle Data Provider for .NET, Managed Driver
- Windows10通过cmd命令行添加环境变量_code_god_1024的博客-CSDN博客_命令行添加环境变量