1。查询注册表,获取oracle安装根目录
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\ORACLE_HOME REG_SZ E:\ORACLE\ORA92
得知oracle服务名文件所在地:根目录\network\ADMIN\tnsnames.ora
2。解析该文件,该文件结构如
# ------------------------------------------------
PORTAL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 134.104.52.6)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = portal)
)
)
一行一行获取再解析
跳过以 # 打头的注释行
过滤掉空格后,首字符在 A~z 之间的行就包含了 Oracle 服务名
截取该行第一个 “ = ” 号左边的字符串, trim 处理后就是 Oracle 服务名了
private
string
[] TnsNameRead()
{
ArrayList arr = new ArrayList();
string path = (string)Registry.LocalMachine.OpenSubKey("SOFTWARE\\ORACLE").GetValue("ORACLE_HOME");
path += @"\network\admin\tnsnames.ora";
try
{
using (StreamReader sr = new StreamReader(path))
{
String line;
while ((line = sr.ReadLine()) != null)
{
line = line.Trim();
if (line != "")
{
char c = line[0];
if ( c>= 'A' && c<='z')
{
arr.Add(line.Substring(0, line.IndexOf('=')).Trim());
MessageBox.Show(line.Substring(0, line.IndexOf('=')).Trim());
}
}
}
}
}
catch (Exception e)
{
MessageBox.Show("无法打开tnsnames.ora文件\n"+ e.Message , "警告", MessageBoxButtons.OK, MessageBoxIcon.Stop);
}
return (string[])arr.ToArray(typeof(string));
}
{
ArrayList arr = new ArrayList();
string path = (string)Registry.LocalMachine.OpenSubKey("SOFTWARE\\ORACLE").GetValue("ORACLE_HOME");
path += @"\network\admin\tnsnames.ora";
try
{
using (StreamReader sr = new StreamReader(path))
{
String line;
while ((line = sr.ReadLine()) != null)
{
line = line.Trim();
if (line != "")
{
char c = line[0];
if ( c>= 'A' && c<='z')
{
arr.Add(line.Substring(0, line.IndexOf('=')).Trim());
MessageBox.Show(line.Substring(0, line.IndexOf('=')).Trim());
}
}
}
}
}
catch (Exception e)
{
MessageBox.Show("无法打开tnsnames.ora文件\n"+ e.Message , "警告", MessageBoxButtons.OK, MessageBoxIcon.Stop);
}
return (string[])arr.ToArray(typeof(string));
}