我使用企业库的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)...相关推荐

  1. 织梦php远程连接数据库,用PHP连接Oracle for NT 远程数据库

    用PHP连接Oracle for NT 远程数据库 发布时间:2016-06-17 来源: 点击: 次 我以前用php连接远程oracle8.0.5 for NT 企业版,用ODBC,oracle接口 ...

  2. php 连接oracle乱码,PHP查询oracle数据显示乱码问题

    1.Linux下 执行前脚本前先执行一下命令 export NLS_LANG="SIMPLIFIED CHINESE_CHINA.AL32UTF8" 2.Windows下在代码里添 ...

  3. idea连接oracle可插拔数据库报ORA-12505

    在使用idea连接oracle数据库时,提示ORA-12505报错 [66000][12505] Listener refused the connection with the following ...

  4. JDBC连接oracle,mysql,sqlserver数据库

    JDBC的全称是:Java Database Connectivity,即Java数据库连接. JDBC可以通过载入不同的数据库的"驱动程序"而与不同的数据库进行连接.所以JDBC ...

  5. oracle安装后新建数据库实例及配置

    ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务 的解决方法 (2011-01-20 13:50:37) 转载▼ 标签: it 分类: 技术 早上同事用PL/SQL连接虚拟机中的O ...

  6. PowerDesigner连接oracle、PDMReader导出数据库字典

    二期项目的开发工作已经全部结束,这边客户对于项目验收的流程又有自己的一套规则.原先的办法不能套用,只能因地制宜的配合和推动.完成项目的验收工作了. 技术测试: 技术测试需要包括六个方面,会议时间长达三 ...

  7. php pdo连接oracle乱码,php pdo oracle中文乱码的快速解决方法

    在/etc/profile.d/简历oracle.sh 内容如下在NLS_LANG设置编码 ORACLE_HOME=/usr/lib/oracle/12.1/client64 C_INCLUDE_PA ...

  8. 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 ...

  9. php mysql oracle_php连接Oracle数据库

    要想用php连接Oracle,需要: 1.安装并配置Oracle instant Client 2.配置php的php_oci8_11g拓展 一.Window (一)安装Oracle instant ...

最新文章

  1. JSON与JAVA数据的转换
  2. Android 解锁屏启动过程
  3. Docker Toolbox在window 10 home 下挂载宿主机目录到容器的正确操作
  4. Python基础之:Python中的模块
  5. java上机面试题 039_深入 Java 虚拟机之面试总结篇
  6. 【高并发解决方案】5、如何设计一个秒杀系统
  7. 设计类网站|超实用的工具型网站!
  8. html页面代码重用-document writeln
  9. SVN使用教程总结[转]
  10. 跟我一起学Angular2(1)-了解ng模块化
  11. Do you know? -- season 1
  12. java-如何反编译
  13. linux文本编辑器英文名,科学网—带格式的文本编辑器Typora 之介绍 - 丁祥欢的博文...
  14. python 短信_Python怎么接收手机短信?
  15. javascript案例,专辑前6名
  16. 密度测量:1.密度测量的基础知识
  17. Java获取某个日期前后几天日期
  18. Linux笔记(70)——文件描述符之ulimit命令
  19. lan的以太网标准_并非所有以太网电缆都是平等的:通过升级,您可以获得更快的LAN速度...
  20. Windows Route 路由表命令详解

热门文章

  1. 使用python构建向量空间_使用Docker构建Python数据科学容器
  2. vb6.0 生成exe被简称是木马_使用MSF渗透框架生成PHP木马并实现控制远程服务器
  3. php 实时更新内容_PHP+Redis 有序集合实现 24 小时排行榜实时更新
  4. vscode remote ssh_win10 下安装Vscode
  5. 管状合金电阻和片状合金电阻的区别_合金采样电阻的特点及作用
  6. 信息技术计算机网络课堂实录,信息技术教案:计算机网络简介
  7. Oracle11g新特性:在线操作功能增强-Oracle11g在线重建索引功能增强 (转载)
  8. mysql 跨服务器 etl_mysql数据库跨服务器查询【需要确定mysql支持FEDERATED ,可以参照文章内容自己配置】...
  9. linux写永久路由命令,用route命令添加永久路由(示例代码)
  10. mysql的压缩包安装_mysql 5.7.24 压缩包安装配置方法图文教程