Exemplo n.º 1
0
 /// <summary>
 /// Pseudo-Konstruktor: Wenn noch keine Instanz existiert wird eine
 /// erstellt, sonst nicht.
 /// </summary>
 /// <returns>Die Referenz auf die Instanz einer Klasse zum DB-Zugriff</returns>
 public static Cdv_DB HoleInstanz()
 {
     // Instanz erstellen, wenn noch nicht vorhanden
     if (_obj_instanzVonCdv_DB == null)
         _obj_instanzVonCdv_DB = new Cdv_DB();
     // Referenzen hochzählen
     _i_anzahlReferenzen++;
     // Instanz zurückgeben
     return _obj_instanzVonCdv_DB;
 }
Exemplo n.º 2
0
        private void InitialisiereCdv_DB()
        {
            // Instanz erstellen
            _cdv_DB = Cdv_DB.HoleInstanz();
            // Configfile auslesen
            XMLZugriff XMLZugriffsObject = new XMLZugriff();
            XMLZugriffsObject.LadeDatei(CKonstanten._str_ServerConfigPfad);
            XMLZugriffsObject.WaehleKnoten("pELS/pELS-Server/DBConfig");
            #region Testen der Konfig Daten evtl. neu konfigurieren

            string str_verbindenErfolgreich = _cdv_DB.testeDB(
                XMLZugriffsObject.HoleKnotenAttribut(0, "UserID"),
                XMLZugriffsObject.HoleKnotenAttribut(0, "PW"),
                XMLZugriffsObject.HoleKnotenAttribut(0, "Host"),
                XMLZugriffsObject.HoleKnotenAttribut(0, "Port"),
                XMLZugriffsObject.HoleKnotenAttribut(0, "DBName"),
                XMLZugriffsObject.HoleKnotenAttribut(0, "Lifetime")   );

            if(str_verbindenErfolgreich != "")
            {
                System.Windows.Forms.MessageBox.Show("Folgender Fehler trat beim Verbinden mit der Datenbank auf:\n\n"
                                                    + str_verbindenErfolgreich
                                                    + "\n\nKonfigurieren Sie die Datenbankanbindung bevor es weiter gehen kann.",
                                                    "Fehler bei DB-Konfiguration",
                                                    System.Windows.Forms.MessageBoxButtons.OK,
                                                    System.Windows.Forms.MessageBoxIcon.Error);
                Cpr_frm_ServerKonfiguration konfig = new Cpr_frm_ServerKonfiguration();
                konfig.ShowDialog();
                //Wenn der nutzer es bis dahin immer noch nciht gepackt hat, dann soll er gehen
                if(!konfig.EingabeErfolgreich)
                    Environment.Exit(2);
                else
                //Nochmal die Methode starten (rekursiv)
                    this.InitialisiereCdv_DB();

            }
            #endregion
            else
            {

                // DB-config-Daten zur Verbindung nutzen
                bool b_verbindenErfolgreich = _cdv_DB.VerbindeMitDB(
                    XMLZugriffsObject.HoleKnotenAttribut(0, "UserID"),
                    XMLZugriffsObject.HoleKnotenAttribut(0, "PW"),
                    XMLZugriffsObject.HoleKnotenAttribut(0, "Host"),
                    XMLZugriffsObject.HoleKnotenAttribut(0, "Port"),
                    XMLZugriffsObject.HoleKnotenAttribut(0, "DBName"),
                    XMLZugriffsObject.HoleKnotenAttribut(0, "Lifetime")   );
                // wenn was schief ging Exception werfen
                if (!b_verbindenErfolgreich) throw new Exception("Verbindung mit DB konnte nicht aufgebaut werden.");
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// Achtung! Die Methode wurde noch nicht getestet!!!
        /// Datenbank auf Initialzustand setzen
        /// </summary>
        public void ErstelleNeuePelsDatenbank(string pin_dbName)
        {
            #region Verbindung zur DefaultDB herstellen
            string str_tmp_angemeldeterNutzer;
            // Schließe Verbindung zur Datenbank, falls offen
            _cdv_DB.SchliesseDBVerbindung();
            // Öffne neue Verbindung zur der Default PostgreSQL Datenbank
            _cdv_DB = Cdv_DB.HoleInstanz();
            // Configfile auslesen
            XMLZugriff XMLZugriffsObject = new XMLZugriff();
            XMLZugriffsObject.LadeDatei(CKonstanten._str_ServerConfigPfad);
            XMLZugriffsObject.WaehleKnoten("pELS/pELS-Server/DBConfig");
            // DB-config-Daten zur Verbindung nutzen
            bool b_verbindenErfolgreich = _cdv_DB.VerbindeMitDB(
                XMLZugriffsObject.HoleKnotenAttribut(0, "UserID"),
                XMLZugriffsObject.HoleKnotenAttribut(0, "PW"),
                XMLZugriffsObject.HoleKnotenAttribut(0, "Host"),
                XMLZugriffsObject.HoleKnotenAttribut(0, "Port"),
                "template1",
                XMLZugriffsObject.HoleKnotenAttribut(0, "Lifetime")   );
            //merken des Benutzernamen um Ihn beim Erstellen zu ersetzen
            str_tmp_angemeldeterNutzer = XMLZugriffsObject.HoleKnotenAttribut(0, "UserID");
            // wenn was schief ging Exception werfen
            if (!b_verbindenErfolgreich) throw new Exception("Verbindung mit DB konnte nicht aufgebaut werden.");
            #endregion

            #region pELS_DB erstellen und damit verbinden
            // Löscht die Datenbank falls existent
            try
            {
                _cdv_DB.AusfuehrenDDLAnfrage("DROP DATABASE \"" + pin_dbName + "\";");
            }
            catch (Exception ex)
            {
                //nur den Fehler abfangen, dass man eine DB droppen will, die nicht existiert
                if(!ex.Message.StartsWith("ERROR: 3D000"))
                    throw ex;
            }
            // Erstellt die neue Datenbank
            try
            {
                //Optimierungen bzw. der Syntax hier: http://pgsqld.active-venture.com/sql-createdatabase.html
                _cdv_DB.AusfuehrenDDLAnfrage("CREATE DATABASE \"" + pin_dbName +"\" TEMPLATE=\"template0\";");
            }
            catch (Exception ex)
            {
                //Fehler abfangen, und an Nutzer weiterreichen
                System.Windows.Forms.MessageBox.Show(ex.Message ,
                                                    "Fehler beim Anlegen der Datenbank");

            }
                // Mit neuer DB verbinden
            this.InitialisiereCdv_DB();
            #endregion

            #region SQL Befehle zur DB Initialisierung aus Datei auslesen und an DB übertragen
            //Variablendeklaration
            StreamReader sqlStream = null;
            // Liest die Skripte aus einer Datei
            try
            {
                sqlStream = new StreamReader(CKonstanten._str_PfadZuPelsDbSchemaDatei);
            }
            catch (Exception ex)
            {	//Hinweis auf Fehler geben
                System.Windows.Forms.MessageBox.Show("Folgender Fehler beim öffnen der Datei "+CKonstanten._str_PfadZuPelsDbSchemaDatei+" auf\n\n\n"+ex.Message,
                                                     "Fehler beim Lesen der Datei",
                                                     System.Windows.Forms.MessageBoxButtons.OK,
                                                    System.Windows.Forms.MessageBoxIcon.Error);
            }

            // Zwischenspeicher für die einzelnen Befehlszeilen
            string str_Befehlszeile = String.Empty;
            string str_sqlBefehl = String.Empty;
            if(sqlStream !=null)
            {	// Datei Zeilenweise durchgehen
                while ((str_Befehlszeile = sqlStream.ReadLine()) != null)
                {
                    if (str_Befehlszeile.StartsWith("//") || str_Befehlszeile.StartsWith("/*"))
                    {
                        //es handelt sich um einen Kommentar, der nicht betrachtet wird
                    }
                    else
                    {
                        //Anfügen und auch gleich den Richtigen Benutzer eintragen -> alexG
                        str_sqlBefehl += str_Befehlszeile.Replace("UserNameToReplace",str_tmp_angemeldeterNutzer);
                        if(str_sqlBefehl.EndsWith(";"))
                        {
                            _cdv_DB.AusfuehrenDDLAnfrage(str_sqlBefehl);
                            str_sqlBefehl = String.Empty;
                        }
                    }

                }
            }
            #endregion
        }