Laden...

Verbindung zu Datenbank verwenden

Erstellt von Didi88 vor 17 Jahren Letzter Beitrag vor 17 Jahren 2.446 Views
D
Didi88 Themenstarter:in
12 Beiträge seit 2006
vor 17 Jahren
Verbindung zu Datenbank verwenden

Hallo!

Ich hab mich schon vor ein paar tagen gemeldet, jetzt hab ich mir mein Programm nochmal angesehen und ich weiß einfach nicht wie ich es lösen könnte:

Ich erklär euch mal mein Beispiel:
Hab ein Menü gemacht mit "Öffnen" dort soll irgendeine Datenbank ausgewählt werden.
Über ein Kombinationsfeld kann ich verschiedene SQL-Befehle (wie SELECT) auswählen, und in einem Textfeld daneben weitere Befehle für die Datenbank eingeben (*From Tabelle1 .....).
Wenn ich auf einen Button klicke, soll in einem DataGridView dieser komplette Befehl (vom Kombinationsfeld und dem Textfeld) ausgegeben werden.

Mein Problem:
Wie kann ich, die Verbindung zur Datenbank, die ich bereits bei "Datei --> Öffnen" gemacht habe, auch beim Button verwenden?
Ich habe es nämlich so gelöst: Mein Programm stellt eine Verbindung zur Datenbank bei "Datei --> Öffnen" her und ebenso wenn ich auf den Button klicke.
Das muss doch einfacher gehn?

L
273 Beiträge seit 2006
vor 17 Jahren

weist du bereits vorher die Datenbanknamen ? Wieviele sind es ? Also ich würde einfach ein Funktion bauen die du bei "Datenbank öffnen" aufrufst. und hier definierst du den verbindungsstring und den übergibts du dann einfach an eine zweite Funktion die die Datenbankverbindung aufbaut.
Weist was ich meine ?

D
Didi88 Themenstarter:in
12 Beiträge seit 2006
vor 17 Jahren

Der Pfad der Datenbank wird mithilfe von ....


                string sDatei = dlgDateiOeffnen.FileName;

                objVerbindung = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + sDatei);


.... ermittelt.
und den Namen weiß ich vorher ned, es kann beliebige Datenbank geöffnet werden 😉

Und nein, keine Ahnung wie du das genau meinst.. 🙁 wie würde denn so eine Funktion aussehen?
Kann man nicht einfach die Verbindung, die ich zur Datenbank gemacht habe in den Zwischenspeicher speichern und die dann später beim Buttonklick verwenden? (btw macht man das ned mit DataSet?)

Danke!!

1.549 Beiträge seit 2004
vor 17 Jahren

du musst nur eine Variale im Klassenkontxt anlegen und nicht im Methoden Kontext also:


class Klasse
{
string Klassenweit_Nutzbar;
void Methode()
{
string Methodenweit_Nutzbar;
}
}

Wir Arbeiten eigendlich nicht wir nehmen nur das geld

3.728 Beiträge seit 2005
vor 17 Jahren

Original von Didi88
Kann man nicht einfach die Verbindung, die ich zur Datenbank gemacht habe in den Zwischenspeicher speichern und die dann später beim Buttonklick verwenden? (btw macht man das ned mit DataSet?)

Was meinst Du mit Zwischenspeicher? Doch nicht die Windows-Zwischenablage für Copy & Paste Operationen, oder?

Du erzeugst irgendwann in Deiner Anwendung ein OleDbConnection-Objekt. Dieses Objekt existiert so lange, bis es seinen Gültigkeitsbereich verlässt. Je nach dem wo Du die Objektvariable deklarierst, gibt es einen anderen Gültigkeitsbereich. S.H.-Teichhof hat Dir bereits ein Beispiel gegeben. Wenn Du dein OleDbConnection-Objekt auf Klassenebene (Also innerhalb der Klassenklammer {} und nicht innerhalb einer Funktion) deklarierst, lebt das Objekt so lange wie die Instanz der Klasse, in der es deklariert ist. In Deinem Fall ist die Klasse Dein Formular. Die Connection lebt also so lange, wie Deine Anwendung ausgeführt wird. Alle Funktionen können mit diesem einen OleDbConnection-Objekt arbeiten.

Wenn Du auf eine andere Datenbank wechseln willst, brauchst Du nur den Connectionstring der OleDbConnection zu ändern. Du solltest übrigens Datenbankverbindungen nicht offen lassen (Wie das früher bei ADO oft gemacht wurde). DataSets und DataTables arbeiten unabhängig von der Datenbank und benötigen keine durchgehende Verbindung. Auf diese Weise kannst Du auch ganz leicht zwischen verschiedenen Datenbank wechseln.

D
Didi88 Themenstarter:in
12 Beiträge seit 2006
vor 17 Jahren

Danke für eure hilfe!!

Schaut euch das mal an:


namespace Lernprogramm
{
    public partial class Form1 : Form
    {
        OleDbConnection objVerbindung;
		string sHerstellVerbindung;
        

        public Form1()
        {
            InitializeComponent();
        }


        private void mnSchliessen_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        public void mnOeffnen_Click(object sender, EventArgs e)
        {
            if (dlgDateiOeffnen.ShowDialog() == DialogResult.OK)
            {
                string sDatei = dlgDateiOeffnen.FileName;
                objVerbindung = new OleDbConnection();      //neue Verbindung
                sHerstellVerbindung = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + sDatei;    //Verbinden mit Pfadname
                objVerbindung.ConnectionString = sHerstellVerbindung;       // ConnectionStringt zeigt Standort der Datenbank an
            }


        }

        private void btnAusgabe_Click(object sender, EventArgs e)
        {
                string sBefehl = "" + cmbAuswahl.Text + " " + txtEingabe.Text + "";
                OleDbDataAdapter objAdapter = new OleDbDataAdapter(sBefehl, objVerbindung);  //macht Verbindung zu eingegebenen SQL-Befehlen
                OleDbCommand objBefehl = new OleDbCommand();
                objBefehl.Connection = objVerbindung;
                try
                {
                    objVerbindung.Open();
                DataSet objDataSet = new DataSet();
                objAdapter.Fill(objDataSet, "Tabelle");
                objVerbindung.Close();
                dgDaten.DataSource = objDataSet.Tables["Tabelle"];
               }
               catch
               {
                  MessageBox.Show("Bitte einen gültigen Befehl eingeben!");
               }
        }



    }
}

Funktionieren tut das Programm.. ich hoffe ich habs richtig gemacht!
Könntet ihr mich dennoch erklären was die ganzen Befehle bedeuten? ich habe angefangen Kommentare zu schreiben, um auch zu verstehen was ich da überhaupt programmiert habe.. aber ich verzweifel halb daran, da im internet für mich kaum verstehbare erklärungen stehen (...msdn)

was heißt z.b. dieser befehl?
OleDbCommand objBefehl = new OleDbCommand(); <--

Wäre nett wenn ihr mir bisschen was erklären könntet!!

Danke!

1.549 Beiträge seit 2004
vor 17 Jahren

da erzeugst du ein neues OleDbCommand objekt das du in der ebenfals neu devinierten variable OleDbCommand objBefehl Speicherst.

Aber mal Blöd gefragt hast du Über haubt ein buch oder was in der richtng um zu versten was OOP Bedeutet?

Wir Arbeiten eigendlich nicht wir nehmen nur das geld

D
Didi88 Themenstarter:in
12 Beiträge seit 2006
vor 17 Jahren

Buch schon.. nur das is grad mal einführung zu Visual Studio......
jaja.. ich mochte meinen lehrer schon immer....

Danke jedenfalls

1.549 Beiträge seit 2004
vor 17 Jahren

Wir Arbeiten eigendlich nicht wir nehmen nur das geld