Zum Inhalt springen
Der Guide für ein smartes Leben.
Datenbankprogrammierung

Objektvariablen

Autoren: Redaktion pcmagazin und Walter Saumweber • 4.10.2009 • ca. 2:05 Min

Die Objektvariable meineKontakte für die Liste ist, wie die Variablen connection, command und lesen, am Anfang der Formularklasse definiert. Die Instanzierung erfolgt im Instruktor (meineKontakte = gcnew List;). Beachten Sie auch hier, dass die Anweisung using namespace System::Collections::Generic...

Die Objektvariable meineKontakte für die Liste ist, wie die Variablen connection, command und lesen, am Anfang der Formularklasse definiert. Die Instanzierung erfolgt im Instruktor (meineKontakte = gcnew List;). Beachten Sie auch hier, dass die Anweisung using namespace System::Collections::Generic; erforderlich ist, um den generischen Datentyp direkt verwenden zu können.

Ein SqlCommand-Objekt erhalten Sie als Rückgabewert der SqlConnection-Methode CreateCommand(). Das SqlCommand-Objekt besitzt die Eigenschaft CommandText, der Sie den erforderlichen SQLBefehl, hier eine SELECT-Abfrage, als String zuweisen.

Danach führen Sie den SQL-Befehl mit der Methode ExecuteReader() aus und weisen die Ergebnismenge der Datenbankabfrage der SqlDataReader-Variablen lesen zu. Anschließend fügen Sie der generischen Liste in einer while-Schleife Datensatz für Datensatz mit der Add()-Methode als neues Kontakt-Objekt hinzu.

Die Ausgangsposition des SqlDataReaders ist stets vor dem ersten Datensatz. Jeder Aufruf der Methode Read() setzt die Lesemarke auf den nächsten Datensatz. Die Methode gibt false zurück, wenn kein Datensatz mehr vorhanden ist. Die Klasse SqlDataReader stellt in Abhängigkeit vom Datentyp für den Zugriff auf die Spaltenwerte einer Tabelle verschiedene Methoden zur Verfügung. Die Methode GetString() ruft den Wert als Zeichenfolge ab.

Die Tabellenspalte wird dabei als Index - beginnend bei 0 - übergeben. Schließlich schreiben Sie die Daten des ersten Kontakt-Objekts in die dafür vorgesehenen Textfelder des Formulars.

Damit wären Sie mit der Arbeit am Code der Form1_Load()-Ereignismethode soweit fertig. Allerdings erscheint noch eine Ausnahmebehandlung angebracht, da eventuelle Fehler im Zusammenhang mit der Datenverbindung zu berücksichtigen sind. Dies tritt z.B. ein, wenn die angegebene Datenbankdatei aus irgendeinem Grunde nicht mehr existiert. Natürlich fangen Sie die spezielle Ausnahme SqlException, die im Zusammenhang mit SQL Server-Fehlern auftritt, vor der allgemeinen ab.

Suchfunktion implementieren

Dass der Benutzer navigieren, also sich den nächsten oder vorigen Kontakt anzeigen lassen kann, ist eher trivial. Dazu inkrementieren bzw. dekrementieren Sie einfach eine Zählvariable wie dsindex und benutzen diese als Index für das anzuzeigende Kontakt-Objekt. Der erste Kontakt besitzt den Index 0, der letzte den Index Kontakt::Anzahl - 1. Die Variable Anzahl ist in der Klasse Kontakt als static - und der Einfachheit halber auch als public - definiert. Sie gibt die Gesamtzahl der gespeicherten Kontakte wieder.

Schwieriger ist es schon, eine Suchfunktion einzurichten. Der Benutzer gibt in das untere Textfeld die Zeichenfolge ein, nach der er suchen will. Im nebenstehenden Listenfeld selektiert er das Suchkriterium - standardmäßig durchsucht das Programm die E-Mail-Adressen. Schließlich startet er die Suche über die Schaltfläche mit der Aufschrift Suchen. In deren Click-Ereignismethode ist daher der passende Code zu hinterlegen. Für die E-Mail-Suche sieht dieser im Wesentlichen wie folgt aus:

if (listBox1->SelectedIndex == -1 ||
listBox1->SelectedIndex == 2)
{ for each(Kontakt^ k in meineKontakte)
{ if(k->Email->
ToLower()->Contains(textBox3->
Text->ToLower()))
{// Daten dieses Kontakts anzeigen
// Indexvariable aktualisieren
break; }
}
}