ODP.Net新的OracleConnection"值不能为空参数名称:path"

时间:2017-10-23 10:39:24

标签: c# oracle

我有一个使用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. 创建了一个新的简单测试控制台项目(连接正常)

2 个答案:

答案 0 :(得分:0)

接下来,在我的列表中,检查我的项目并要求同事打开它以确定问题是否与代码一起传播。他能够成功执行。我删除了我的工作副本并将其从TFS中删除,所有内容都重新开始工作。我怀疑bin目录中的某些内容已损坏。

答案 1 :(得分:0)

我有同样的问题。它也发生在Managed Data Provider中,并且发生在第一个实例化的Oracle类中,例如OracleParameter。但这仅发生在单元测试的调试器中,或者在Assembly.GetEntryAssembly()返回null的其他情况下发生。

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

        try
        {
            new OracleDependency();
        }
        catch
        {
        }

这将触发ConfigBaseClass的静态构造函数,并忽略该错误。只需在您的代码中调用一次即可,例如同样在静态构造函数中。我使用OracleDependency是因为它与大多数其他Oracle类一样不需要Dispose