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?
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 ?
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!!
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
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.
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!
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
Buch schon.. nur das is grad mal einführung zu Visual Studio......
jaja.. ich mochte meinen lehrer schon immer....
Danke jedenfalls
ich würde dir:
http://www.galileocomputing.de/openbook/oo/
http://www.galileocomputing.de/openbook/visual_csharp/
und [Tutorial] Guide to C#
nahelegen vieleicht hilft es
Wir Arbeiten eigendlich nicht wir nehmen nur das geld