Beispiel #1
0
        //========================================================================================
        // 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);
            }
        }
Beispiel #2
0
        //========================================================================================
        // 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);
                    }
                }
            }
        }