请教如何读取tnsnames.ora中的内容?

小沈扬 2006-09-07 03:29:13
比如,tnsnames.ora中包含的内容如下:

# Generated by Oracle configuration tools.

DEV =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.32.54.198)(PORT = 1581))
)
(CONNECT_DATA =
(SERVICE_NAME = dev)
)
)

DEV2 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.32.54.199)(PORT = 1583))
)
(CONNECT_DATA =
(SERVICE_NAME = DEV2)
)
)

DEV3 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.32.54.197)(PORT = 1585))
)
(CONNECT_DATA =
(SERVICE_NAME = DEV3)
)
)

DEV4 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.32.54.196)(PORT = 1587))
)
(CONNECT_DATA =
(SERVICE_NAME = DEV4)
)
)
...



我想写个C#程序将该文件中的Database 名称"DEV","DEV2","DEV3" 和 "DEV4"读取出来,
比如就像SQL Navigator那样获得tnsnames.ora中的Database,
繁请教各位大虾指点一二,小弟不胜感激涕零~!!!
...全文
846 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
xxj 2006-09-11
  • 打赏
  • 举报
回复
有时侯,有的人真不够地道.答案给了,却不给分.





xxj 2006-09-08
  • 打赏
  • 举报
回复
这个问题,你算是找对人了
System.IO.StreamReader sr = new StreamReader(configFilePath);
string strContent = sr.ReadToEnd();
sr.Close();
#region 采用正则表达式进行匹配 2005-07-13 22:39完成
Regex Desc = new Regex(@"\s*(\w+\.)*\w+\s*=\s*\(\s*description\s*=", RegexOptions.IgnoreCase|RegexOptions.Compiled);
Match m;
for ( m = Desc.Match( strContent ) ; m.Success ; m = m.NextMatch() )
{
foreach( Group g in m.Groups )
{
if( g.Length != 0 && (g.Index>0 && (strContent[g.Index]=='\n' || strContent[g.Index]=='\r') || g.Index ==0 ) ) //this.ColorString( startIndex + g.Index , g.Length , Color.Red )
{
string tnsName = strContent.Substring(g.Index,g.Length);
if(tnsName[tnsName.Length - 1] != '.')
{
int j = tnsName.IndexOf("=");
tnsName = tnsName.Substring(0,j);
tnsName = tnsName.Trim();
if(!ar.Contains(tnsName))
ar.Add(tnsName);
}
}
}
}
#endregion
goldendreams 2006-09-08
  • 打赏
  • 举报
回复
“Database 名称"DEV","DEV2","DEV3" 和 "DEV4"读取出来, ”好像不叫数据库名,
是网络服务名,唯一标识网络上的一个服务
goldendreams 2006-09-08
  • 打赏
  • 举报
回复
string strRead = sr.ReadLine();
if (!strRead.StartsWith("#") && !strRead.StartsWith(" ") && strRead.EndsWith("="))
{
//你要做的操作
}
小伙子,你太不爱动脑筋!自己多动动手,都是字符串的操作,或许有更简单的办法!
小沈扬 2006-09-07
  • 打赏
  • 举报
回复
谢谢 点拨
可是读出文件中的内容后,
如何区分哪些内容是我所需要的呢?
goldendreams 2006-09-07
  • 打赏
  • 举报
回复
抱歉
是StreamReader类
StreamReader sr=new StreamReader(string FilePath);//wen文本文件路径
然后st.ReadLine();//每个ReadLine()读取一行
sr.Peek()>0来判断文本文件是否有剩余的行
MSDN里讲的很清楚,你看看。
goldendreams 2006-09-07
  • 打赏
  • 举报
回复
StreamRead
ReadLine()读取一行;
然后就是字符串的操作了
goldendreams 2006-09-07
  • 打赏
  • 举报
回复
StreamRead
EadLine()读取一行;
然后就是字符串的操作了
Eddie005 2006-09-07
  • 打赏
  • 举报
回复
System.IO.TextReader tr = System.IO.File.OpenText(@"D:\oracle\ora92\network\ADMIN\tnsnames.ora");
string tmp = tr.ReadToEnd();
tr.Close();

然后就是对字符串tmp拆分和解析的问题了

111,125

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧