通过代码获取文件 tnsnames.ora 的位置

2024-01-09

我怎样才能获得该位置tnsnames.ora在安装了 Oracle 客户端的机器上按代码编写文件?

Windows 注册表项是否指示该文件的位置?


几年前我也遇到过同样的问题。
当时我必须支持 Oracle 9 和 10,因此代码只处理这些版本,但也许它可以让您免于一些研究。 这个想法是:

  • 搜索注册表以确定 oracle 客户端版本
  • 尝试找到ORACLE_HOME
  • 最后从 HOME 获取 tnsnames

public enum OracleVersion
{
    Oracle9,
    Oracle10,
    Oracle0
};

private OracleVersion GetOracleVersion()
{
    RegistryKey rgkLM = Registry.LocalMachine;
    RegistryKey rgkAllHome = rgkLM.OpenSubKey(@"SOFTWARE\ORACLE\ALL_HOMES");

    /* 
     * 10g Installationen don't have an ALL_HOMES key
     * Try to find HOME at SOFTWARE\ORACLE\
     * 10g homes start with KEY_
     */
    string[] okeys = rgkLM.OpenSubKey(@"SOFTWARE\ORACLE").GetSubKeyNames();
    foreach (string okey in okeys)
    {
        if (okey.StartsWith("KEY_"))
            return OracleVersion.Oracle10;
    }

    if (rgkAllHome != null)
    {
        string strLastHome = "";
        object objLastHome = rgkAllHome.GetValue("LAST_HOME");
        strLastHome = objLastHome.ToString();
        RegistryKey rgkActualHome = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\ORACLE\HOME" + strLastHome);
        string strOraHome = "";
        object objOraHome = rgkActualHome.GetValue("ORACLE_HOME");
        string strOracleHome = strOraHome = objOraHome.ToString();
        return OracleVersion.Oracle9;
    }
    return OracleVersion.Oracle0;
}

private string GetOracleHome()
{
    RegistryKey rgkLM = Registry.LocalMachine;
    RegistryKey rgkAllHome = rgkLM.OpenSubKey(@"SOFTWARE\ORACLE\ALL_HOMES");
    OracleVersion ov = this.GetOracleVersion();

    switch(ov)
    {
        case OracleVersion.Oracle10:
            {
                string[] okeys = rgkLM.OpenSubKey(@"SOFTWARE\ORACLE").GetSubKeyNames();
                foreach (string okey in okeys)
                {
                    if (okey.StartsWith("KEY_"))
                    {
                        return rgkLM.OpenSubKey(@"SOFTWARE\ORACLE\" + okey).GetValue("ORACLE_HOME") as string;
                    }
                }
                throw new Exception("No Oracle Home found");
            }
        case OracleVersion.Oracle9:
            {
                string strLastHome = "";
                object objLastHome = rgkAllHome.GetValue("LAST_HOME");
                strLastHome = objLastHome.ToString();
                RegistryKey rgkActualHome = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\ORACLE\HOME" + strLastHome);
                string strOraHome = "";
                object objOraHome = rgkActualHome.GetValue("ORACLE_HOME");
                string strOracleHome = strOraHome = objOraHome.ToString();
                return strOraHome;
            }
        default:
            {
                throw new Exception("No supported Oracle Installation found");
            }
    }
}

public string GetTNSNAMESORAFilePath()
{
    string strOracleHome = GetOracleHome();
    if (strOracleHome != "")
    {
        string strTNSNAMESORAFilePath = strOracleHome + @"\NETWORK\ADMIN\TNSNAMES.ORA";
        if (File.Exists(strTNSNAMESORAFilePath))
        {
            return strTNSNAMESORAFilePath;
        }
        else
        {
            strTNSNAMESORAFilePath = strOracleHome + @"\NET80\ADMIN\TNSNAMES.ORA";
            if (File.Exists(strTNSNAMESORAFilePath))
            {
                return strTNSNAMESORAFilePath;
            }
            else
            {
                throw new SystemException("Could not find tnsnames.ora");
            }
        }
    }
    else
    {
        throw new SystemException("Could not determine ORAHOME");
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过代码获取文件 tnsnames.ora 的位置 的相关文章

随机推荐

  • 如何在 JAX-WS 中添加响应标头?

    我有一个与此类似的方法 WebMethod public BeanResponse generar WebParam header true mode Mode INOUT name auditoria partName auditoria
  • 如何使用 RSpec 针对真实应用程序开发 Rails3 引擎?

    关于引擎开发以及使用虚拟应用程序进行测试的文章已经有很多 在我们的例子中 我们开发的引擎不是独立的实体 而是依赖于真实的 Rails 3 应用程序 我们仍然希望此代码存在于引擎中 而不是成为应用程序的一部分 因为引擎的工作是从拥有自己的表和
  • 按名称选择特定打印机 VB

    我制作了一个程序 该程序将在启动时运行 要求用户选择他们的默认打印机 该代码显示组合框中所有已安装的打印机 提交按钮会将组合框中选择的打印机设置为该用户的默认打印机 有没有办法只显示包含特定文本的打印机名称 例如 ABC printer1A
  • Python正则表达式选择所有不匹配模式的元素

    我昨天问了类似的问题保留 pandas 系列中带有模式的元素 而不将其转换为列表 https stackoverflow com questions 64958329 keep elements with pattern in pandas
  • Python:如何在 Windows 资源管理器上打开文件夹(Python 3.6.2、Windows 10)

    如果我将要打开的路径存储在名为 Finalpath 的字符串中 如下所示 2 8 电影 英语 虎胆龙威系列 那么我如何在 Windows 资源管理器中打开它 Windows 10 Python 3 6 2 P S 我知道很多人问过这个问题
  • 如何在 Android 中将字节数组写入文件?

    这是我创建文件的代码 public void writeToFile byte array try String path data data lalallalaa txt FileOutputStream stream new FileO
  • WordPress 自定义帖子类型搜索结果页面

    我设置了一个自定义搜索表单来搜索和显示自定义帖子类型的结果 形式为
  • next-auth 中 useSession() 的“加载”返回值是什么?

    我正在编写一个 Next js 项目 并使用 GitHub 和实现身份验证next auth 在以下示例中next auth 有一个电话useSession 它返回两个对象 session and loading 然而 我见过的例子都没有实
  • 使用 HERE API 获取我的位置时出现问题(Wifi)[已更新]

    我在我的平板电脑上安装了 HERE 测试产品 这是一款旧的 Android 5 1 平板电脑 没有 GPS 或蜂窝数据 只有 Wifi 并且它可以很好地 大约 使用 Wifi 提供我的位置 所以我尝试在我的应用程序中进行相同的编程 下载了
  • Cordova 插件的输出延迟

    我编写了一个 Cordova 插件来下载文件并将其保存在数据文件夹中 除了返回值之外 一切都工作正常 我想显示一个进度条并需要获取当前进度 这是我的代码中的相关部分 while readed is read buffer gt 0 fos
  • Rails CSRF 令牌 - 它们会过期吗?

    我注意到 如果您使用无效的 CSRF 令牌发帖 rails devise 会自动将您注销 我有一个不刷新页面的应用程序 用户长时间坐在实时页面上 有时用户会被踢出 我想知道 CSRF 令牌是否已过期 从而使其无效 这就是为什么我想了解 Ra
  • 从 Gradle 构建中复制 Maven“dependencyManagement”标签

    我正在尝试跟随这个 Spring Boot Vaadin 指南 https www baeldung com spring boot vaadin however我正在使用 Gradle not Maven 在该指南的最顶部 他们说使用以下
  • 在 Fortran 中执行张量积的有效方法

    我需要在 Fortran 中对一些大型数组执行一些张量积和收缩 有时它们是向量或矩阵 有时涉及的一些对象是 3 数组或 4 数组 当然 通过一些嵌套循环编写一个子例程来实现此目的非常容易 而这正是我所做的 但对于非常大的数组 我必须多次调用
  • jQuery scrolltop - 第一次使用后不起作用

    我在此菜单上使用 jQuery 滚动顶部功能 http goethesternfriseure de index php http goethesternfriseure de index php 问题是滚动功能仅在第一次起作用 第二次点击
  • 如何检查 stopCluster (R) 是否工作

    当我尝试使用 stopCluster 从工作区中删除集群时 它似乎不起作用 下面是我正在使用的代码 gt cl lt makeCluster 3 gt cl socket cluster with 3 nodes on host local
  • 在 React 中在函数内声明函数

    我刚刚遇到了一个 React 代码 我不确定这是否是一个好方法 这是该代码的示例实现 class App extends React Component renderMessage gt function getMessage return
  • 程序退出后,使curses程序输出保留在终端回滚历史记录中

    我对诅咒很陌生 所以我正在尝试 python 中的一些不同的东西 我已经初始化了窗口并为窗口对象设置了scrollok 我可以添加字符串 并且滚动可以正常工作 这样 addstr 在窗口末尾不会出现任何错误 我想要的是在程序完成后能够在终端
  • IIS URL 重写 ASP

    我尽力扫描论坛寻求帮助 以制作 web config 来重写此类 url domain com default asp id 3 language 2 我希望这可以是 domain com en service where language
  • Angular2 中的动态模板“嵌入”

    我正在努力实现这样的目标 我有一个名为的模型类ObjectTypeA ObjectTypeB and ObjectTypeC 还有一个工厂ComponentFactory 根据传入的对象类型将创建不同的组件 ComponentFactory
  • 通过代码获取文件 tnsnames.ora 的位置

    我怎样才能获得该位置tnsnames ora在安装了 Oracle 客户端的机器上按代码编写文件 Windows 注册表项是否指示该文件的位置 几年前我也遇到过同样的问题 当时我必须支持 Oracle 9 和 10 因此代码只处理这些版本