我想用C#写代码列出ORACLE客户端注册的服务名,
现已找到了保存ORACLE客户端注册的服务名的文件,
文件路径为…\oracle\ora92\network\admin\tnsnames.ora
格式为文本文件,形式如下:
# TNSNAMES.ORA Network Configuration File: D:\oracle\ora92\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.MMSERVER =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.2)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SID = ora9)
      (SERVER = DEDICATED)
    )
  )GISFENG_WUZF =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = wuzf)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SID = gisfeng)
      (SERVER = DEDICATED)
    )
  )
现在只想获得服务名(MMSERVER,GISFENG_WUZF),不知道用哪种方式写好一点。希望探讨一下,有分送的哦!

解决方案 »

  1.   

    SQL SERVER里可以用SQLDMO来得到网络中的所有服务器名,ORACLE的不太清楚,不过读\\NETWORK\\ADMIN\\tnsnames.ora的内容也是可以
      

  2.   

    private void btnOK_Click(object sender, System.EventArgs e)
    {
    string strTxt="";
    string rStr="";
    StreamReader sr=File.OpenText("D:\\oracle\\ora92\\network\\admin\\tnsnames.ora");
    string tempStr;
    while((tempStr=sr.ReadLine())!= null)
    {
    strTxt=strTxt + tempStr + "\n";
    } int k=0;
    for (int i=0;i<strTxt.Length;i++)
    {
    string c=strTxt.Substring(i,1);
    if (c.Equals("#"))
    {
    while(!c.Equals("\n"))
    {
    i=i+1;
    c=strTxt.Substring(i,1);
    }
    }
    if(c.Equals("(")) 
    {
    k=k+1;
    }
    if (k==0 && !c.Equals("\n") && !c.Equals(" "))
    {
    rStr=rStr+c;
    }
    if(c.Equals(")"))
    {
    k=k-1;
    }
    }
    rStr=rStr.Remove(rStr.Length-1,1);
    this.comboBox1.DataSource=rStr.Split('=');
    }