entlib连接oracle乱码,无法构造类型数据库。您必须配置容器以提供此值(EntLib 5 + ODP.NET)...
我使用企业库的ODP.NET和4.1版本,对比2008年。并且一切正常。
现在,使用Enterprise Library的ODP.NET Oracle.DataAccess 4.112.2.0和版本5.0.414.0迁移到2010,.net 4.0。
Oracle.DataAccess 4.112.2.0
EnterpriseLibrary 5.0.414.0
在最近从企业库版本4.1升级到5.0之后,一旦出现以下错误:
“数据库类型无法构建,您必须配置容器以提供此值。”
Microsoft.Practices.ServiceLocation.ActivationException: Activation
error occured while trying to get instance of type Database, key
"ConnectionStrings.Oracle.xxx" --->
Microsoft.Practices.Unity.ResolutionFailedException: Resolution of the
dependency failed, type =
"Microsoft.Practices.EnterpriseLibrary.Data.Database", name =
"ConnectionStrings.Oracle.xxx". Exception occurred while: while
resolving. Exception is: InvalidOperationException - The type Database
cannot be constructed. You must configure the container to supply this
value.
参考EntLib论坛:http://entlib.codeplex.com/discussions/215290
任何解决方案?
我的配置
providerName="Oracle.DataAccess.Client" />我的代码
var key = "ConnectionStrings.Oracle.xxx";
Database db = Microsoft.Practices.EnterpriseLibrary.Common.Configuration.EnterpriseLibraryContainer.Current.GetInstance(key); //~(EntLib 5 recommended)
using (DbCommand cm = db.GetStoredProcCommand("TBL_FRKDATA.TBL_FRKDATA_FND_ALL"))
{
cm.Parameters.Add(CreateCursorParameter("P_REFCURSOR"));
// Using "using" will cause both the DataReader and connection to be
// closed. (ExecuteReader will close the connection when the
// DataReader is closed.)
using (IDataReader dataReader = db.ExecuteReader(cm))
{
while (dataReader.Read())
{
builder.Add(dataReader);
}
return builder.EntityList;
}
}完整的错误堆栈跟踪
Microsoft.Practices.ObjectBuilder2.DynamicMethodConstructorStrategy.GuardTypeIsNonPrimitive(IBuilderContext
context, SelectedConstructor selectedConstructor)
Microsoft.Practices.ObjectBuilder2.DynamicMethodConstructorStrategy.PreBuildUp(IBuilderContext
context)
Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext
context)
Microsoft.Practices.ObjectBuilder2.DynamicMethodBuildPlanCreatorPolicy.CreatePlan(IBuilderContext
context, NamedTypeBuildKey buildKey)
Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp(IBuilderContext
context)
Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext
context) Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t,
Object existing, String name, IEnumerable1 resolverOverrides)
Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t, Object
existing, String name, IEnumerable1 resolverOverrides)
Microsoft.Practices.Unity.UnityContainer.Resolve(Type t, String name,
ResolverOverride[] resolverOverrides)
Microsoft.Practices.Unity.UnityServiceLocator.DoGetInstance(Type
serviceType, String key)
Microsoft.Practices.ServiceLocation.ServiceLocatorImplBase.GetInstance(Type
serviceType, String key)
Microsoft.Practices.ServiceLocation.ServiceLocatorImplBase.GetInstance(Type
serviceType, String key)
Microsoft.Practices.ServiceLocation.ServiceLocatorImplBase.GetInstance[TService](String
key)
UPDATE
这段代码适用于我:
[TestMethod]
public void Conectar_con_EntLib_y_OdpNet_Test()
{
var key = "ConnectionStrings.Oracle.xxx";
string connectionString = ConfigurationManager.ConnectionStrings[key].ConnectionString;
string providerName = ConfigurationManager.ConnectionStrings[key].ProviderName;
//Database db = Microsoft.Practices.EnterpriseLibrary.Common.Configuration.EnterpriseLibraryContainer.Current.GetInstance(key);
TestContext.WriteLine("connectionString: " + connectionString);
TestContext.WriteLine("providerName: " + providerName);
DbProviderFactory factory = DbProviderFactories.GetFactory(providerName);
using (DbConnection connection = factory.CreateConnection())
{
connection.ConnectionString = connectionString;
connection.Open();
TestContext.WriteLine("Estado Conexión: " + connection.State);
connection.Close();
}
}解答:兰迪列维(http://entlib.codeplex.com/discussions/215290)
您不能将Enterprise Library OracleDatabase与Oracle.DataAccess.Client提供程序一起使用。内置的OracleDatabase被硬编码为
使用OracleClientFactory DbProviderFactory,而您想使用ODP.NET提供程序(Oracle.DataAccess.Client)。
最好的办法是让EntLibContrib Oracle ODP.NET数据提供者工作,因为它应该支持你需要的所有东西,包括配置文件。
由于看起来您可以创建DbProviderFactory,因此您可以尝试将GenericDatabase与ODP.NET OracleClientFactory一起使用,但我会猜测
您将遇到针对特定Oracle功能的问题(例如refcursor)。
你可以直接使用它:
string connectionString = ConfigurationManager.ConnectionStrings["Connection String"].ConnectionString;
string providerName = ConfigurationManager.ConnectionStrings["Connection String"].ProviderName;
DbProviderFactory factory = DbProviderFactories.GetFactory(providerName);
var db = new GenericDatabase(connectionString, factory);
entlib连接oracle乱码,无法构造类型数据库。您必须配置容器以提供此值(EntLib 5 + ODP.NET)...相关推荐
- 织梦php远程连接数据库,用PHP连接Oracle for NT 远程数据库
用PHP连接Oracle for NT 远程数据库 发布时间:2016-06-17 来源: 点击: 次 我以前用php连接远程oracle8.0.5 for NT 企业版,用ODBC,oracle接口 ...
- php 连接oracle乱码,PHP查询oracle数据显示乱码问题
1.Linux下 执行前脚本前先执行一下命令 export NLS_LANG="SIMPLIFIED CHINESE_CHINA.AL32UTF8" 2.Windows下在代码里添 ...
- idea连接oracle可插拔数据库报ORA-12505
在使用idea连接oracle数据库时,提示ORA-12505报错 [66000][12505] Listener refused the connection with the following ...
- JDBC连接oracle,mysql,sqlserver数据库
JDBC的全称是:Java Database Connectivity,即Java数据库连接. JDBC可以通过载入不同的数据库的"驱动程序"而与不同的数据库进行连接.所以JDBC ...
- oracle安装后新建数据库实例及配置
ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务 的解决方法 (2011-01-20 13:50:37) 转载▼ 标签: it 分类: 技术 早上同事用PL/SQL连接虚拟机中的O ...
- PowerDesigner连接oracle、PDMReader导出数据库字典
二期项目的开发工作已经全部结束,这边客户对于项目验收的流程又有自己的一套规则.原先的办法不能套用,只能因地制宜的配合和推动.完成项目的验收工作了. 技术测试: 技术测试需要包括六个方面,会议时间长达三 ...
- php pdo连接oracle乱码,php pdo oracle中文乱码的快速解决方法
在/etc/profile.d/简历oracle.sh 内容如下在NLS_LANG设置编码 ORACLE_HOME=/usr/lib/oracle/12.1/client64 C_INCLUDE_PA ...
- php pdo连接oracle乱码,php pdo oracle中文乱码的快速解决方法_PHP
在/etc/profile.d/简历oracle.sh 内容如下在NLS_LANG设置编码 ORACLE_HOME=/usr/lib/oracle/12.1/client64 C_INCLUDE_PA ...
- php mysql oracle_php连接Oracle数据库
要想用php连接Oracle,需要: 1.安装并配置Oracle instant Client 2.配置php的php_oci8_11g拓展 一.Window (一)安装Oracle instant ...
最新文章
- JSON与JAVA数据的转换
- Android 解锁屏启动过程
- Docker Toolbox在window 10 home 下挂载宿主机目录到容器的正确操作
- Python基础之:Python中的模块
- java上机面试题 039_深入 Java 虚拟机之面试总结篇
- 【高并发解决方案】5、如何设计一个秒杀系统
- 设计类网站|超实用的工具型网站!
- html页面代码重用-document writeln
- SVN使用教程总结[转]
- 跟我一起学Angular2(1)-了解ng模块化
- Do you know? -- season 1
- java-如何反编译
- linux文本编辑器英文名,科学网—带格式的文本编辑器Typora 之介绍 - 丁祥欢的博文...
- python 短信_Python怎么接收手机短信?
- javascript案例,专辑前6名
- 密度测量:1.密度测量的基础知识
- Java获取某个日期前后几天日期
- Linux笔记(70)——文件描述符之ulimit命令
- lan的以太网标准_并非所有以太网电缆都是平等的:通过升级,您可以获得更快的LAN速度...
- Windows Route 路由表命令详解
热门文章
- 使用python构建向量空间_使用Docker构建Python数据科学容器
- vb6.0 生成exe被简称是木马_使用MSF渗透框架生成PHP木马并实现控制远程服务器
- php 实时更新内容_PHP+Redis 有序集合实现 24 小时排行榜实时更新
- vscode remote ssh_win10 下安装Vscode
- 管状合金电阻和片状合金电阻的区别_合金采样电阻的特点及作用
- 信息技术计算机网络课堂实录,信息技术教案:计算机网络简介
- Oracle11g新特性:在线操作功能增强-Oracle11g在线重建索引功能增强 (转载)
- mysql 跨服务器 etl_mysql数据库跨服务器查询【需要确定mysql支持FEDERATED ,可以参照文章内容自己配置】...
- linux写永久路由命令,用route命令添加永久路由(示例代码)
- mysql的压缩包安装_mysql 5.7.24 压缩包安装配置方法图文教程