//======================================================================================== // ReadSidName() // Find the default TNS name specified in either the ORACLE_SID environment // variable or the registry. The environment variable takes precedent. //======================================================================================== private static void ReadSidName(SortedList list, SortedList all) { string sid = null; TnsName name; sid = System.Environment.GetEnvironmentVariable("ORACLE_SID"); if (sid != null) { sid = sid.ToLower(); name = new TnsName(sid, Location.Environment, null); list.Add(sid, name); all.Add(sid + Location.Environment.ToString(), name); } sid = DatabaseSetup.OracleSid; if (sid != String.Empty) { sid = sid.ToLower(); registryPath = DatabaseSetup.OracleHomeKey; name = new TnsName(sid, Location.Registry, registryPath); if (!list.Contains(sid)) { list.Add(sid, name); } all.Add(sid + Location.Registry.ToString(), name); } }
//======================================================================================== // ReadTnsNames() // Parse the tnsnames.ora file. This routine essentially filters out all // comments and anything between paranthesis, leaving only the TNS names. //======================================================================================== private static void ReadTnsNames(SortedList list, SortedList all) { string home = String.Empty; WowRegistryKey key = WowRegistry.ClassesRoot.OpenSubKey("OracleDatabase.OracleDatabase\\CurVer"); if (key == null) { home = DatabaseSetup.OracleHome; } else { key = WowRegistry.ClassesRoot.OpenSubKey((string)key.GetValue(null) + "\\CLSID"); if (key != null) { string clsid = (string)key.GetValue(null); key = WowRegistry.ClassesRoot.OpenSubKey("CLSID\\" + clsid + "\\LocalServer32"); if (key != null) { string oracon = (string)key.GetValue(null); if (!String.IsNullOrEmpty(oracon)) { home = oracon.Substring(0, oracon.ToLower().IndexOf("\\oracon")); if (home.StartsWith("\"")) { home = home.Substring(1); } } } } } var content = new StringBuilder(); tnsNamesOraPath = Path.Combine(home, @"network\admin\tnsnames.ora"); try { using (var reader = new StreamReader( (Stream)File.OpenRead(tnsNamesOraPath), System.Text.Encoding.ASCII)) { char ch; int depth = 0; bool inComment = false; while (reader.Peek() >= 0) { ch = (char)reader.Read(); if (inComment) { if (ch == 10) { inComment = false; } } else { if (ch == '#') { inComment = true; } else if (ch == '(') { depth++; } else if (ch == ')') { depth--; } else if ((depth == 0) && !Char.IsWhiteSpace(ch)) { content.Append(ch); } } } reader.Close(); } } catch (Exception) { return; } if (content.Length > 0) { string[] names = content.ToString().Split('='); string name; TnsName tname; for (int i = 0; i < names.Length; i++) { name = names[i].Trim().ToLower(); if ((name.Length > 0) && (name.IndexOf("http") < 0) && (name.IndexOf("extproc") < 0)) { tname = new TnsName(name, Location.TnsNames, null); if (!list.Contains(name)) { list.Add(name, tname); } all.Add(name + Location.TnsNames.ToString(), tname); } } } }