C# 如何使用C获取网络上可用的Oracle服务器列表#

C# 如何使用C获取网络上可用的Oracle服务器列表#,c#,.net,database,oracle,C#,.net,Database,Oracle,如何使用C#列出网络上可用的所有Oracle服务器。我需要得到服务器名和IP地址。经过一些搜索后,发现对于SqlServer,以下代码可以工作 SqlDataSourceEnumerator.Instance.GetDataSources(); 有没有办法让Oracle也这么做?您可能需要Oracle的.Net数据提供程序。Oracle提供了一些在线教程和文档,帮助您入门 下载: 示例代码(由Oracle提供): 返回的数据表包含: 实例名 服务器名 服务名 协议 港口 一旦您有了服务器名

如何使用C#列出网络上可用的所有Oracle服务器。我需要得到服务器名和IP地址。经过一些搜索后,发现对于SqlServer,以下代码可以工作

SqlDataSourceEnumerator.Instance.GetDataSources();

有没有办法让Oracle也这么做?

您可能需要Oracle的.Net数据提供程序。Oracle提供了一些在线教程和文档,帮助您入门

下载:

示例代码(由Oracle提供):

返回的数据表包含:

  • 实例名
  • 服务器名
  • 服务名
  • 协议
  • 港口

一旦您有了服务器名,您就可以通过
Dns.GetHostAddresses(字符串主机名)

轻松找到它的IP。如果假设每个数据库都有一个侦听器在该服务器上的默认端口(1521)上运行,则可以ping每个服务器上的端口1521并查看谁响应。如果您碰巧使用AD/Oracle name/OID进行名称解析,则可能会从该服务器获取服务器列表。您可以通过查看其他端口来优化策略,以查看看起来像Oracle侦听器的端口是否符合要求,或者查看非默认但通用的端口,但这会带来一些挑战。但这会引发一些错误。使用oracle 10g和11g Express Edition以及ODP.NET,无法在动态链接库c:\oracle\OracleI1.dll中找到\u init\u wconfig\u ctx上的过程入口点,其可在c:\oraclexe\app\oracle\product\10.2.0(适用于10g)中找到。我认为Oracle server安装包括客户端组件。在我的应用程序中,执行以下操作,如获取、保存和操作系统级身份验证。除此服务器查找代码外,所有操作都正常。
using System;
using System.Data;
using System.Data.Common;
using Oracle.DataAccess.Client;

class DataSourceEnumSample
{
    static void Main()
    {
        string ProviderName = "Oracle.DataAccess.Client";

        DbProviderFactory factory = DbProviderFactories.GetFactory(ProviderName);

        if (factory.CanCreateDataSourceEnumerator)
        {
            DbDataSourceEnumerator dsenum = factory.CreateDataSourceEnumerator();
            DataTable dt = dsenum.GetDataSources();

            // Print the first column/row entry in the DataTable
            Console.WriteLine(dt.Columns[0] + " : " + dt.Rows[0][0]);
            Console.WriteLine(dt.Columns[1] + " : " + dt.Rows[0][1]);
            Console.WriteLine(dt.Columns[2] + " : " + dt.Rows[0][2]);
            Console.WriteLine(dt.Columns[3] + " : " + dt.Rows[0][3]);
            Console.WriteLine(dt.Columns[4] + " : " + dt.Rows[0][4]);
        }
        else
            Console.Write("Data source enumeration is not supported by provider");
    }
}