Laden...

MS SQL DataAdapter - SQLCommand -> unterschied?

Letzter Beitrag vor 17 Jahren 5 Posts 2.902 Views
MS SQL DataAdapter - SQLCommand -> unterschied?

Hallo Leute!
Ich habe einen SQL2005 Server und möchte dort Daten holen und schreiben!
Nun habe ich aus der Hilfe erfahren wie ich eine Verbindung machen muss. Leider ist mir nicht klar was der Unterschied zwischen dem SQLCommand und dem SQLDataAdapter ist?!?!?!?
Für einen Select Command benutze ich foldenden Code - er funktioniert auch!


 //SQL Data Adapter initialisieren
 SqlDataAdapter mySQLAdapter = new SqlDataAdapter();
        
//Select Command erstellen
SqlCommand mycommand = new SqlCommand("SELECT ....., myDBConnection);

//SQL Data Adapter mit Command füllen
mySQLAdapter.SelectCommand = mycommand;

//DataTabel deklarieren -> in diese werden dann die Daten geschrieben     
DataTable customerTable = new DataTable();

mySQLAdapter.Fill(customerTable);


Soweit so gut! Nun möchte ich aber einen INSERT Befehl machen! Laut der Doku sollte es so funktionieren!


 // Create the InsertCommand.
command = new SqlCommand(
        "INSERT ......", connection);

// Add the parameters for the InsertCommand.
 adapter.InsertCommand = command;

So, hier funktioniert einmal nichts - irgendwie verstehe ich das auch das ja erst der befehl mit "ExecuteNonQuery" ausgeführt werden muss! Nun zu meinen Fragen:

  1. Warum brauche ich bei dem Select Befehl ein ExcecuteQuery ausführen!
  2. Ist dieser Code so richtig?
  3. Ich könnte mir ja das adapter.InsertCommand = command; ersparen wenn ich sofort mycommand.BeginExecuteNonQuery(); ausführen würde!

Ich bin für jede Erklärung dankbar!

Für Insert,Update und Delete verwendest du die Methode ExecuteNoQuery des SqlCommands.

Für aggregat Funktionen( Count,Sum etc) ExecuteScalar.

Für gewöhliche Querys am einfachsten Views inf Form typisierter DataSets.

oder ExecuteReader des SqlCommands zum Iterieren durch die Datensätze.

Kannst du mir auch noch erklären wo dann hier der unterschied ist:

command.beginexecuteQuery

SQLAdapter.InsertCommand.ExecuteNonQuery();

Ist es egal welchen ich hier verwende???

Der Unterschied zwischen BeginExecuteNonQuery und ExecuteNonQuery ist, dass ersteres asynchron läuft (die Methode kehrt sofort zurück, die Query wird im Hintergrund ausgeführt) während zweiteres synchron ausgeführt wird (die Methode kehrt erst dann zurück, wenn die Query vollständig ausgeführt wird).

Ganz allgemein solltest du dir klar machen, dass der DataAdapter ein Hilfsobjekt ist, um den Inhalt von Datenbanktabellen mit einem DataSet im Speicher zu synchronisieren. Wie du in der Dokumentation lesen kannst (und solltest), sind DataSets Repräsentationen der Daten der Datenbank im Speicher. DataAdapter stellen den Austausch der Daten zwischen DataSet und Datenbank sicher. DataAdapter verwenden für diesen Austausch die entsprechenden Select, Insert, Update und Delete-Queries in Form von SqlCommands (bzw. eine andere IDbCommand Implementation je nach Provider).

Um lediglich ein Insert-Statement loszulassen, reicht auch ein einfaches SqlCommand.

Grüße,
Andre

In dem Zusammenhang empfehle wärmstens das Buch

Datenbankprogrammierung mit Visual C# 2005 (Gebundene Ausgabe)
von Walter Doberenz, Thomas Gewinnus

Da steht zwar nicht alles drin, aber doch relativ viel mit guten Bspielen