32.3 Aktionsabfragen absetzen
Abfragen, die Änderungen an den Originaldaten der Datenbank nach sich ziehen (UPDATE, DELETE INSERT) oder die Struktur einer Datenbank verändern (CREATE TABLE), werden mit der Methode ExecuteNonQuery abgesetzt.
Handelt es sich bei dem Befehl um ein UPDATE-, INSERT- oder DELETE-Kommando, können Sie über den Rückgabewert die Anzahl der von der Anweisung betroffenen Datenzeilen feststellen.
32.3.1 Datensätze hinzufügen

Im folgenden Beispielprogramm wird der Tabelle Products ein Datensatz hinzugefügt. Dabei wird der parametrisierte Konstruktor der Klasse SqlCommand verwendet, der im ersten Parameter den SQL-Befehl und im zweiten die Referenz auf das SqlConnection-Objekt entgegennimmt.
// Beispiel: ..\Kapitel 32\DatensätzeHinzufügen
static void Main(string[] args) {
SqlConnection con = new SqlConnection("...");
// SQL-Befehl
string strSQL =
"INSERT INTO Products(ProductName, Discontinued) " +
"VALUES('Schweizer Käse',0)";
try {
con.Open();
SqlCommand cmd = new SqlCommand(strSQL, con);
// Kommando absetzen
cmd.ExecuteNonQuery();
}
catch (Exception e) {
Console.WriteLine("Fehlermeldung: {0}", e.Message);
}
con.Close();
}
Listing 32.3 Datensätze zu einer Tabelle hinzufügen
32.3.2 Datensätze löschen

Der Datensatz aus dem vorhergehenden Beispiel soll nun wieder gelöscht werden. Da wir nun daran interessiert sind, ob und wie viele Datenzeilen von einer Löschanweisung betroffen sind, werten wir den Rückgabewert der Methode ExecuteNonQuery an der Konsole aus.
// Beispiel: ..\Kapitel 32\DatensätzeLöschen
static void Main(string[] args) {
SqlConnection con = new SqlConnection("...");
try {
con.Open();
string strSQL = "DELETE FROM Products " +
"WHERE ProductName='Schweizer Käse'";
SqlCommand cmd = new SqlCommand(strSQL, con);
Console.Write("Anzahl der gelöschten Datensätze = ");
Console.WriteLine(cmd.ExecuteNonQuery());
}
catch (Exception e) {
Console.WriteLine("Fehlermeldung: {0}", e.Message);
}
con.Close();
}
Listing 32.4 Löschen eines Datensatzes
Nach dem ersten Start des Programms wird der im Abschnitt zuvor hinzugefügte Datensatz gelöscht. An der Konsole sehen wir das bestätigt, da die Zahl 1 ausgegeben wird. Rufen wir das Programm ein zweites Mal auf, wird kein Datensatz gefunden, der dem Kriterium ProductName='Schweizer Käse' entspricht. Das spiegelt sich in der Ausgabe
Die Anzahl der gelöschten Datensätze = 0
wider.
32.3.3 Datensätze ändern

Zu Beginn dieses Abschnitts wurde in dem Beispiel ExecuteNonQueryDemo bereits gezeigt, wie Sie Datensätze in der Datenbank editieren können. Daher soll an dieser Stelle auf ein weiteres Beispiel verzichtet werden.
32.3.4 Abfragen, die genau ein Ergebnis liefern
Mit der SELECT-Anweisung können Sie eine Datensatzliste nach bestimmten Auswahlkriterien aus einer Datenbank abrufen. Der Befehl SELECT wird aber auch dann benutzt, wenn eine Aggregatfunktion definiert werden soll. Aggregatfunktionen liefern ein Ergebnis zurück. Beispielsweise können Sie mit
SELECT COUNT(*) FROM Products
die Anzahl der Artikel in der Tabelle Products ermitteln und mit
SELECT COUNT(*) FROM Products WHERE CategoryID = 1
feststellen, wie viele Artikel zur Kategorie 1 gehören. Neben COUNT stehen noch weitere Aggregatfunktionen zur Verfügung: SUM, um die Summe eines numerischen Ausdrucks zu ermitteln, AVG, um einen Durchschnittswert zu bilden, sowie MIN und MAX, um aus einem gegebenen Ausdruck den Maximal- bzw. Minimalwert zu erhalten.
Um den Rückgabewert einer Aggregatfunktion entgegenzunehmen, rufen Sie die Methode ExecuteScalar auf das SqlCommand-Objekt auf. Der Typ der Rückgabe ist Object, daher muss das Ergebnis noch in den passenden Datentyp konvertiert werden.
string textSQL = "SELECT COUNT(*) FROM Products WHERE CategoryID=1";
SqlCommand cmd = new SqlCommand(textSQL, con);
int anzahlDS = Convert.ToInt32(cmd.ExecuteScalar());
Listing 32.5 Aufrufen einer Aggregatfunktion
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.