Galileo Computing - Zum Seitenanfang

24.2 Aktionsabfragen absetzen Zur nächsten ÜberschriftZur vorigen Überschrift

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.


Galileo Computing - Zum Seitenanfang

24.2.1 Datensätze hinzufügen Zur nächsten ÜberschriftZur vorigen Überschrift

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 24\DatensätzeHinzufügen
// ------------------------------------------------------------------
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();


Galileo Computing - Zum Seitenanfang

24.2.2 Datensätze löschen Zur nächsten ÜberschriftZur vorigen Überschrift

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 24\DatensätzeLöschen
// ------------------------------------------------------------------
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();

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.


Galileo Computing - Zum Seitenanfang

24.2.3 Datensätze ändern Zur nächsten ÜberschriftZur vorigen Überschrift

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.


Galileo Computing - Zum Seitenanfang

24.2.4 Abfragen, die genau ein Ergebnis liefern topZur vorigen Überschrift

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());