c# - ODP.Net 新的 OracleConnection "Value cannot be null Parameter Name: path"

标签 c# oracle

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

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

返回的错误是:

值不能为空。 参数名称:路径

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

到目前为止,我已尝试解决此问题:

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

最佳答案

我遇到了同样的问题。它也发生在托管数据提供者身上,它发生在第一个被实例化的 Oracle 类上,例如Oracle 参数。但它只发生在单元测试的调试器或 Assembly.GetEntryAssembly() 返回 null 的其他情况下。

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

        try
        {
            new OracleDependency();
        }
        catch
        {
        }

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

关于c# - ODP.Net 新的 OracleConnection "Value cannot be null Parameter Name: path",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46887380/

相关文章:

c# - 使用 DRY 原则重构 C# 代码

c# - 如何获取元素的父元素?

sql - Oracle - 比较列的默认值

python - 在 Python 中散列一个整数以匹配 Oracle 的 STANDARD_HASH

C# Indexer 属性 - 有什么方法可以虚拟化 get 而不是 set 方法?

c# - 在 LINQ 中分组时如何显式声明类型?

c# - 试图让 IsEnabled 绑定(bind)到依赖属性

c# - Oracle ODP.net 非托管 12.2 (Oracle.DataAccess.dll) 需要哪些依赖项/dll?

java - java中的查询仅返回空值

sql - 选择具有时间格式的所有列