Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Performance bei string ?
martin_zi
myCSharp.de - Member



Dabei seit:
Beiträge: 134

Themenstarter:

Performance bei string ?

beantworten | zitieren | melden

Hi

Ich mach mir gerade Gedanken wie das mit dem String in dem Fall ist. ?(

Ich erzeuge mir in einer Schleife einen string. Mit dem wird dann über SqlCommand
der Wert in eine DB gespeichert. Ich laufe also über ein Feld von Zahlen oder anderen
Werten um so alle Daten in die DB zu speichern.

in etwa so:


string command = String.Format("INSERT INTO tempTbl (IDOld, .... , id);
using (SqlCommand cmd = new SqlCommand(command, connection))
{
   using (SqlDataReader reader = cmd.ExecuteReader())
   {
   }
}

Nur das ist wahrscheinlich nicht sehr schlau. Ich weiß nämlich nicht wie Format
den String erzeugt. Wird da für jeden String den ich erzeuge ein neues Objekt erzeugt und Speicher reserviert ? Das wäre dann doch zimmlich dämlich so weil danach der GBC wieder alles "aufsammeln" muss. Gibt es da eine besser Möglichkeite ? Oder wie macht man das geschickt ?

Noch was gibt es auch noch einen andere möglichkeit das Command abzusetzten ?
ExecuteReader ist da glaub ich auch nicht so schlau weil ich den Rückgabewert gar nicht gebrauchen kann

Gruß
Martin
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo martin_zi,

==> SqlParameter/SqlParameterCollection

herbivore
private Nachricht | Beiträge des Benutzers
juetho
myCSharp.de - Member



Dabei seit:
Beiträge: 3358
Herkunft: Berlin

beantworten | zitieren | melden

Zitat
Original von martin_zi
Noch was gibt es auch noch einen andere möglichkeit das Command abzusetzten ?
ExecuteReader ist da glaub ich auch nicht so schlau weil ich den Rückgabewert gar nicht gebrauchen kann
DbCommand.ExecuteNonQuery

Jürgen
private Nachricht | Beiträge des Benutzers
martin_zi
myCSharp.de - Member



Dabei seit:
Beiträge: 134

Themenstarter:

beantworten | zitieren | melden

Hi

Noch mal.. laut msdn kann man damit nur Spaltennamen mappen.
Ich bräuchte aber auch sowas in etwa wie "select * from @tabelName"
Das geht mit SqlParameter nicht. Oder doch ?

Bei meinem Versuch kommt immer eine SQLException und sagt mir dass der
Parameter @tabelName nicht existiert.

Gruß Martin
private Nachricht | Beiträge des Benutzers
Yellow
myCSharp.de - Experte

Avatar #avatar-2347.png


Dabei seit:
Beiträge: 832

beantworten | zitieren | melden

hallo martin_zi,

nein, für eine Tabelle gibt es keinen SQLParameter. Hier würde ich den Tabellenamen über eine String-Verkettung bzw. einem StringBuilder an die SQL-Anweisung anfügen, insofern der Tabellenamen nicht aus einer Benutzereingabe herrührt. Dann müsstest du die Benutzereingabe entwerten bevor du sie in die SQL-Anweisung übernimmst um die Gefahr einer SQL-Injection zu vermeiden.

-yellow
Selbst ein Weg von tausend Meilen beginnt mit einem Schritt (chinesisches Sprichwort).

Mein Blog: Yellow's Blog auf sqlgut.de
private Nachricht | Beiträge des Benutzers
martin_zi
myCSharp.de - Member



Dabei seit:
Beiträge: 134

Themenstarter:

beantworten | zitieren | melden

Achso verstehe ok danke !

Gruß
private Nachricht | Beiträge des Benutzers