Entwickler-Ecke
Datenbanken (inkl. ADO.NET) - SQL-Tabelle per for-Schleife füllen
Doug123 - Di 01.07.08 08:56
Titel: SQL-Tabelle per for-Schleife füllen
Schönen guten Morgen!
Ich benutze den SQL Server 2005 und möchte nun in eine von meinen erstellten Tabellen in der Datenbank per for-Schleife Pseudodaten einfügen, um zu schauen wie lange das so ungefähr dauert.
Meine bisherige Vorgehensweise (die leider nicht funktioniert) war diese:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| try { _OpenConnection(sServer, sDataBase);
command = connection.CreateCommand(); command.CommandText = "INSERT INTO " + sTableName + " (ID, Spalte1, Spalte2) " + "VALUES(@ID, @Spalte1, @Spalte2)";
for (int i = 1; i<=100; i++) { command.Parameters.AddWithValue("@ID", "ID").Value = i; command.Parameters.AddWithValue("@Spalte1", "Spalte1").Value = i.ToString(); command.Parameters.AddWithValue("@Spalte2", "Spalte2").Value = i.ToString();
command.ExecuteNonQuery(); } catch (SqlException ex) { MessageBox.Show(ex.Message); } finally { CloseConnection(); } |
Ich bekomme nach dem Einfügen des ersten Datensatzes dann folgende Meldung ausgegeben:
"Der Variablenname '@ID' wurde bereits deklariert. Variablenamen müssen in einem Abfragebereich oder in einer gespeicherten Prozedur eindeutig sein."
Wie kann man das nun am besten realisieren, da ich momentan net weiß, wie ich außer mit dem "AddWithValue" den einzelnen Zellen Werte zuweisen kann!
Ich hoffe, dass ihr mir ein wenig weiterhelfen könnt! Vielen Dank!
Gruß
Doug
JüTho - Di 01.07.08 09:24
Hallo,
zunächst meine Standardantwort: Schau in der
SDK-Doku (= MSDN Library) nach, welche Methoden es bei Parameters noch gibt. Dann stellst Du fest, dass Du (wie meistens mindestens) zwei Möglichkeiten hast:
1. In jedem Durchgang der Schleife werden zunächst alle Parameter gelöscht und dann (wie bisher) neu erzeugt.
2. Viel besser: Die Parameter werden einmal erzeugt, in jedem Durchgang werden nur neue Werte eingetragen. Also etwa so:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| command = connection.CreateCommand(); command.CommandText = "INSERT INTO " + sTableName + " (ID, Spalte1, Spalte2) " + "VALUES(@ID, @Spalte1, @Spalte2)"; command.Parameters.Add("@ID", SqlDbType.Int32); command.Parameters.Add("@Spalte1", SqlDbType.String); command.Parameters.Add("@Spalte2", SqlDbType.String);
for (int i = 1; i<=100; i++) { command.Parameters["@ID"].Value = i; command.Parameters["@Spalte1"].Value = i.ToString(); command.Parameters["@Spalte2"].Value = i.ToString();
command.ExecuteNonQuery(); } |
Wundere Dich aber nicht, dass dies "sehr lange" dauern wird: Bei einer Schleife mit vielen Datensätzen wird meistens mit DbTransaction gearbeitet, um mehrere Datensätze "am Stück" zu verarbeiten.
Gruß Jürgen
Doug123 - Di 01.07.08 12:59
Vielen Dank für deine Antwort! Klappt jetzt alles wunderbar! :)
Gruß
Doug
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!