blumione hat folgendes geschrieben : |
Wie benutze ich dann Datadapter.Fill korrekt? Ich dachte das wäre für eine einzelne Ausgabe geeignet und OleDBDataReader eben für mehr.. While Schleifen.. |
Das ist keine korrekte Erklärung. DataSet bzw. DataTable ist sinnvoll, wenn mehr Daten oder Zeilen oder Werte benötigt werden, später erneut benutzt werden und nach Änderungen wieder abgespeichert werden sollen. Eine Standardanwendung geht über ein DataGridView.
Dein Übertrag in eine ListBox ist ein Grenzfall; da ist beides wenig sinnvoll (also egal).

Hinzu kommt manchmal, dass der DbDataAdapter länger dauert; aber das ist sowieso relativ (also in der Praxis meistens irrelevant).
blumione hat folgendes geschrieben : |
... das ist ja dann so etwa: ...
Was ist bei diesen beiden der Unterschied? |
In der Tat so gut wie kein Unterschied.
blumione hat folgendes geschrieben : |
Bzw. Wiso ist das DataSet besser, weil ich es nacher immer noch abfragen kann? |
Genau. Der DbDataReader bietet nur ein einmaliges Lesen und zwar nur vorwärts; die DataTable bleibt bei richtiger Anwendung erhalten und kann auch durch BindingSource oder direkten Datenzugriff zum Blättern benutzt werden. (Richtige Anwendung bedeutet: keine Erzeugung mit new nur innerhalb des Einlesens, sondern Deklaration und Erzeugung außerhalb dieser Methode.)
blumione hat folgendes geschrieben : |
Wenn ich den CommandText jetzt doch nicht durch StringBuilder aufbauen soll, sondern durch DbCommand.Parameters.. Wie sieht das dann am Besten aus? |
StringBuilder ist für einen CommandText nicht unbedingt erforderlich, weil das ein relativ kurzer String ist; da ist auch die String-Addition akzeptabel. Aber die
variablen Bestandteile sollen möglichst nicht direkt im String enthalten sein. Falsch (als Beispiel mit verschiedenen Datentypen, die so mit Sicherheit nicht funktionieren, sondern zu Exceptions führen):
C#-Quelltext
1: 2: 3: 4:
| string insertText = "INSERT INTO Kunden VALUES(" + myID.ToString() + ", '" + textboxName.Text + "', '" + datetimeBirthday.ToShortDateString() + "', " + numeric.Value.ToString());"; // Rechnungsbetrag |
Richtig ist dies (bei MS-SQL o.a. DBMS sehen die Parameter etwas anders aus):
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| string insertText = "INSERT INTO Kunden (ID, Name, Birthday, BillValue) VALUES(?, ?, ?, ?);"; OledbCommand cmd = new OledbCommand(insertText, conn); cmd.Parameters.AddWithValue("@ID", myId); cmd.Parameters.AddWithValue("@Name", textboxName.Text); cmd.Parameters.AddWithValue("@Birthday", datetimeBirthday); cmd.Parameters.AddWithValue("@BillValue", numeric.Value); |
Der DbProvider setzt die Gänsefüßchen selbständig und nimmt auch die Formatierung korrekt vor.
Jürgen