У меня есть файл tnsnames.ora, который содержит более 50 псевдонимов.Ниже приведен пример содержимого.
В настоящее время я использую приведенный ниже код для получения псевдонимов из tns;
tnsnamesreadercustom tsc = new tnsnamesreadercustom();
uceTNS.DataSource = tsc.LoadTNSNames(FilePath);
И я успешно разбираю эти псевдонимы tnsnames в выпадающий список;
NAME1
NAME2
NAME3
Но я не смог завершить последний шаг, который является:
Пользователь выбирает вышеуказанные псевдонимы, например, NAME1, и он должен получить подробную информацию в окне сообщения, как;
HOST:name1.local.com
PORT:1521
SERVICE_NAME:nameone
SID=null
Вот пример tnsnames.ora;
NAME1=
(DESCRIPTION=
(ADDRESS=
(PROTOCOL=TCP)
(HOST=name1.local.com)
(PORT=1521)
)
(CONNECT_DATA=
(SERVER=dedicated)
(SERVICE_NAME=nameone)
)
)
NAME2=
(DESCRIPTION=
(ADDRESS=
(PROTOCOL=TCP)
(HOST=172.31.60.227)
(PORT=1531)
)
(CONNECT_DATA=
(SERVER=dedicated)
(SID=nametwo)
)
)
NAME3=
(DESCRIPTION=
(ADDRESS=
(PROTOCOL=TCP)
(HOST=172.31.70.174)
(PORT=1521)
)
(CONNECT_DATA=
(SERVER=dedicated)
(SERVICE_NAME=namethree)
)
)
Вот пример tnsnamesreadercustom;
class tnsnamesreadercustom
{
public List<string> LoadTNSNames(string strTNSNAMESORAFilePath)
{
List<string> DBNamesCollection = new List<string>();
string RegExPattern = @"[\n][\s]*[^\(][a-zA-Z0-9_.]+[\s]*=[\s]*\(";
if (!strTNSNAMESORAFilePath.Equals(""))
{
//check out that file does physically exists
System.IO.FileInfo fiTNS = new System.IO.FileInfo(strTNSNAMESORAFilePath);
if (fiTNS.Exists)
{
if (fiTNS.Length > 0)
{
//read tnsnames.ora file
int iCount;
for (iCount = 0; iCount < Regex.Matches(System.IO.File.ReadAllText(fiTNS.FullName), RegExPattern).Count; iCount++)
{
DBNamesCollection.Add(Regex.Matches(System.IO.File.ReadAllText(fiTNS.FullName), RegExPattern)[iCount].Value.Trim().Substring(0, Regex.Matches(System.IO.File.ReadAllText(fiTNS.FullName), RegExPattern)[iCount].Value.Replace("=", " ").Trim().IndexOf(" ")).Replace(" ", "").Replace("=", "").Replace(Environment.NewLine, ""));
}
}
}
}
return DBNamesCollection;
}
}