【问题标题】:Provider is not compatible with the version of Oracle client: Web, but not WinProvider与Oracle客户端版本不兼容:Web,但不是Win
【发布时间】:2015-08-25 18:30:17
【问题描述】:

“与 Oracle 版本不兼容的 Oracle 提供程序”的错误已在 stackoverflow 上被问过几次,但似乎所有答案都针对 x86 与 64 位或缺少 DLL。

我不确定这种情况是否独特,但是...

我有一个 web 项目、win 项目和一个包含一些共享代码的项目。 现在所有 3 个项目都设置为“任何 CPU”。 win项目可以连接oracle,但是web项目报错

Oracle.DataAccess.Client.OracleException:提供程序不是 与Oracle客户端版本兼容

web 和 win 项目的 bin 文件夹中都有相同的 DLL。

为什么一个可以连接,而另一个不能?我还能尝试什么? (我也尝试过其他平台目标)。

运行时出现错误:

OracleConnection oc = new OracleConnection(ConnectionString);

编辑:连接字符串是通过从 SQL 数据库中读取凭据从 Shared 项目编译的,因此 Win 和 web 连接字符串是相同的。这是一个示例:

User Id=xxx;Password=xxx;
Data Source=(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)
(HOST=172.xx.xx.xx)
(PORT=1521))
(CONNECT_DATA=(SID=xxx)));

【问题讨论】:

  • 你在 web 和 win 项目之间共享 ConnectionString 吗?你能告诉我们每个人的连接字符串吗(编辑凭据很好)
  • 我已经更新了我的帖子。请参阅编辑块。
  • 您确定您对 Oracle.DataAccess 的 Web 引用指向同一个 .dll 吗?我们为具有多个项目的解决方案使用 SharedBinaries 文件夹以避免可能的冲突,但您仍然需要确保实际项目引用指向正确的二进制文件。
  • 嗯,这是不同的文件,但它们的版本号相同。
  • 为了争论,您能否将 web 项目中的引用更改为指向 win 项目中的工作 .dll?这应该会很快告诉您问题所在。

标签: c# oracle11g


【解决方案1】:

我有同样的问题,结果当你在本地运行 web 项目时,iis express 默认使用 32 位作为标准,而你的其他项目可能使用 64 位版本的 dll,这就是它们行为不同的原因,你可以让你的iis express使用64位版本,或者你可以选择安装32位版本的ODAC

【讨论】:

    【解决方案2】:

    当您的oracle db版本与您使用的oracleOracle.DataAccess.dll不同时会发生这种情况,如果是这种情况,请检查版本,然后您需要使用正确版本的oracleOracle.DataAccess.dll。正确后版本dll你需要在所有项目中更改oracleOracle.DataAccess.dll的引用。(从10g迁移到11g时遇到类似情况)。

    【讨论】:

    • 这是不正确的。使用 10.2 客户端连接 11g 数据库不是问题。
    猜你喜欢
    • 2011-08-25
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    • 2013-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-29
    相关资源
    最近更新 更多