【问题标题】:ODP.Net new OracleConnection "Value cannot be null Parameter Name: path"ODP.Net new OracleConnection“值不能为空参数名称:路径”
【发布时间】:2017-10-23 10:39:23
【问题描述】:

我有一个使用 ODP.Net 版本 12.2.1100 的项目。这个项目运行良好,直到今天开放。以下代码行导致错误:

using (var cn = new OracleConnection("User Name={userID}, etc, etc"))

返回的错误是:

Value cannot be null. Parameter name: path

内部异常 at System.Security.Permissions.FileIOPermission.CheckIllegalCharacters(String[] str, Boolean onlyCheckExtras)

到目前为止我为解决此问题所做的尝试:

  1. 将连接字符串从 EZ Connect 更改为完整的 Oracle 字符串
  2. 卸载并重新安装 Oracle.ManagedDataAccess.dll(通过 NuGet)
  3. 确保所有配置文件都是最新的
  4. 创建了一个新的简单测试控制台项目(连接良好)

【问题讨论】:

  • 总是同样的错误?如果是,它似乎与OracleConnection 无关,尤其是。当您使用完整的 Oracle 字符串时。
  • 是的,总是同样的错误。我实际上改为一个空的构造函数和同样的错误。我的直觉告诉我它缺少一些配置,但似乎没有任何改变......

标签: c# oracle


【解决方案1】:

我有同样的问题。它也发生在托管数据提供程序中,并且发生在第一个实例化的 Oracle 类中,例如OracleParameter。但它只发生在单元测试的调试器或Assembly.GetEntryAssembly() 返回 null 的其他情况下。

错误的调用栈给了我一个提示:它调用了System.Web.HttpRuntime.AppDomainAppPath。这会引发异常。通过查看 Oracle 代码,我发现它周围有一个 try-catch,它应该捕获异常,但由于某种原因有时会失败。 在另一个项目中,我遇到了同样的异常,但这次它在遇到我的代码之前就被捕获了。奇怪的。 以下解决方法对我有用:

        try
        {
            new OracleDependency();
        }
        catch
        {
        }

这会触发ConfigBaseClass 的静态构造函数并忽略错误。在您的代码中调用一次就足够了,例如也在静态构造函数中。我使用了OracleDependency,因为它不像大多数其他Oracle 类那样需要Dispose

【讨论】:

    【解决方案2】:

    所以我的清单上的下一个是检查我的项目并要求同事打开它以确定问题是否与代码有关。他能够成功执行。我删除了我的工作副本并将其从 TFS 中拉下来,一切又开始工作了。我怀疑bin 目录中的某些内容已损坏。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多