PDA

Vollständige Version anzeigen : Datenbankzugriff


AJK
27.01.2004, 23:36
Hallo!

Ich suche nach einer möglichst einfachen und unkomplizierten Möglichkeit, auf eine Access2000/XP DB zuzugreifen. Am liebsten würde ich ja DAO nehmen, aber mangels zukünftiger Weiterentwicklung zweifle ich so langsam.

Es handelt sich aber nur um eine LOKALE DB (!) kein Netz- und schon gar kein Internet und so bin ich mir auch nicht sicher, ob ADO da nicht ein wenig hochgegriffen ist... wichtig ist, das es möglichst wenig Abhängigkeiten bei der Angelegenheit gibt und COM stehe ich seit .NET bereit steht auch etwas skeptisch gegenüber.

Mal ganz klein angefangen: wie kann ich denn auf so eine Access-DB zugreifen? Das System der "Datenbank-Anwendung" die .NET als Assistent vorschlägt leuchtet mir nicht so recht ein... ich bin wohl noch zu sehr in DAO verhalftet...

Klasse wäre ein Tutorial oder so...

Gruß
Arne

andreas_a
31.01.2004, 01:07
Hallo,

also ich kann nur sagen das es sehr einfach ist mit .Net auf eine Datenbank zu zu greifen.
Das Problem liegt dabei so, dass es mehrere Möglichkeiten gibt und jeder selber entscheiden muss welche das er nimmt.

Meine Möglichkeit ist ADO.Net einfach und sehr mächtig.

Schritt 1:
Erstelle bei dem ServerExplorer eine neue Verbindung zu deiner Access Datenbank.

Schrit 2:
Erstelle auf deiner Form einen DatenAdapter, den findest du in der ToolBox unter Daten. Wenn es eine Access Db ist dann nimmst du oleDbDataAdapter und bei einem SQl Server sqlDataAdapter. bei anderen Datenbanken kannst du entweder über ODBC gehen dafür brauchst du jedoch eine zusätzliche DLL.

Den DataAdapter Ziehst du auf das Form, und es öffnet sich ein Wizard, dort gibst du die Datenbank an und erstellst die SQL Abfrage.

Schritt 3:
Du hast jetzt unten dein DataAdapter, diesen klickst du an und wählst aus dem Kontext Menü DataSet erstellen.

Diese Datei speichert nachher deine Daten ab und mit dieser wirst du Realtime Arbeiten, also nicht mit der DB selber die brauchst du nur zum Daten holen und diese dann wieder zurück zu schreiben.

Schritt 5:

Damit du deine Daten verwenden kannst, musst du die daten von der Datenbank in dein DataSet rein schreiben.

das machst du indem du folgenden Befehl schreibst:


// Füllen der Daten in das DataSet
oleDbDataAdapter1.Fill(dsDataSet1);


Schritt 6:
Jetzt hast du deine Daten drin und kannst damit arbeiten.
Wenn du eine Winform hast, kannst du die Daten mit deinen Textfeldern, ComboBoxen und sonstiges anbinden über die Eigenschaften. Das ist auch sehr einfach, da man nachher mit dem CurrencyManager leicht diese Daten Manipulieren kann.

CurrencyManager
Der CurrencyManager geht nur bei Windows Forms, leider nicht bei ASp.Net (Oder ich weiss es einfach nur nicht?) Dieser kann dir helfen auf einfache weise deine Daten zu manipulieren.

Zuerst brauchen wir eine globale Variable innerhalb der Klasse


CurrencyManager cm;


Im Konstrukter der Form, schreibst du jetzt die Bindung von den Daten in deinen CurrencyManager rein, dieser muss unterhalb der Anweisung für das Füllen des DataSets stehen.


cm = (CurrencyManager)this.BindingContext[dsDataSet1, "DeineTabelle"];


so nun zum wesentlichen. Erstelle mehrere Buttons:
Neu
Speichern
Löschen
Abbrechen
<<
<
>
>>

jedes dieser Buttons kannst du jetzt befehle zuteilen was Sie machen sollen.

1 Neu

// Löscht alle Angebundenen Felder und erstellt einen Datensatz im DataSet
cm.AddNew();


2. Speichern

// Befehl, das der CurrencyManager fertig sein soll zum Editieren
cm.EndCurrentEdit()
// dsDataSet1.HasChange() schaut nach, ob sie ein Datensatz geändert hat, falls ja wird das Update der Daten in die Datenbank veranlasst, wenn nicht kommt die Meldung
if(dsDataSet1.HasChanges())
{
// Verbindung zur Datenbank wird geöffnet und die Daten werden in die Datenbank zurück geschrieben.
oleDbDataAdapter1.Update(dsDataSet1);
}
else
{
MessageBox.Show("Keine Daten zum Aktualisieren vorhanden", "Keine Aktualisierung", MessageBoxButtons.OK, MessageBoxIcon.Information);
}


3. Löschen

// Löscht den Datensatz von der Position wo sich der CurrencyManager gerade befindet.
cm.RemoveAt(cm.Position);


4. Abbrechen

// Stellt alle änderungen die erstellt wurden wirder in den Orginal zusatand her, beachten, alles nachdem das letzte mal gespeichert wurde von allen Datensatzen!
cm.CancelCurrentEdit();


5. Position wechsel mit << < > >>
Ja da mache ich immer eine Methode mit einem Parameter int iPos, und rufe danach nur die Methode auf, hier die Methode, der reihe nach, geht zum ersten, geht eins zurück, geht ein vor, und geht zum letzten.

public void Position(int iPos)
{
switch(iPos)
{
case 1:
this.BindingContext[dsDataSet1, "DeineTabelle"].Position = 0;
break;
case 2:
this.BindingContext[dsDataSet1, "DeineTabelle"].Position = (this.BindingContext[dsDataSet1, "DeineTabelle"].Position - 1);
break;
case 3:
this.BindingContext[dsDataSet1, "DeineTabelle"].Position = (this.BindingContext[dsDataSet1, "DeineTabelle"].Position + 1);
break;
case 4:
this.BindingContext[dsDataSet1, "DeineTabelle"].Position = (this.dsDataSet1.Tables["DeineTabelle"].Rows.Count - 1);
break;
}
}


das war jetzt eine kleine Einführung in ADO.Net.

Sicher einige VB Programmierer würde es Komplett anders schreiben ohne DataAdapter und CurrencyManager.

Ich persönlich finde diese Methode sehr einfach und auch sehr schnell. es kann für viele sachen verwendet werden, nur für grössere Projekte kann man die SQL sachen wie den DataAdapter in Komponenten rein tun, und diese dann von jeder Form her aufrufen, das ist aber eine andere Geschichte.

Wenn du mehr über die Verwendeung mit Datenbanken wissenmöchtest, kann ich dir nur Empfehlen das Buch Datenbank-Programmierung mit C# zu erwerben ist von MS und bissher das beste das ich gelesen habe, gibt es glaube ich auf für VB.Net.

Und Sorry falls du VB.Net schreibst, aber es sollte sich nicht viel am Code ändern, dass prinzip bleibt sich gleich.

AJK
03.02.2004, 00:31
wollte mich nur noch mal für diese umfassende Antwort bedanken. Hat wirklich sehr geholfen!

Arne