[C#] SqlCommandBuilder

Gerd08

Grünschnabel
Hallo zusammen,

ich bin ein Programmieranfänger und versuche mich gerade an etwas C# und SQL für ein Projekt. Dafür muss ich in eine SQL Datenbank schreiben. Die DatenbankVerbindung funktioniert.
So weit, so gut ABER nun möchte ich möglichst effiziernt der Datenbank Befehle übergeben.

Bisher verwende ich dafür einen Zusammenbau von Strings (etwas so

myInsertString = "INSERT INTO `" + table + "` ("
+ myInsertStringColumn
+ ") VALUES ("
+ myInsertStringValues
+ ")";

Nun hat mir jemand gesagt ich soll dafür einen SqlCommandBuilder oder StringBuilder verwenden. Leider habe ich das bisher nicht hinbekommen. Kann mir da jemand helfen, und mir erklären wie dieser aussehen muss?


Gerd
 
Ich gehe mal davon aus, die, die dir gesagt haben, du sollst soetwas verwenden, haben gemeint, du sollst dir eine Klasse/mehrere Klassen schreiben, die dir einen SQL-String anhand übergebener Paramter "von selbst" zusammenbauen.

Aber eine Gegenfrage: Welche Version von C# verwendest du? Falls es sich um C# 3 (C# Express 2008) handelt, schau dir doch mal LINQ to SQL an! ;)
 
Dann habt ihr aber beide schlecht gesucht! ;)
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommandbuilder(VS.80).aspx

Bzgl. StringBuilder:
Bei einer String-Verkettung, wie du es ob als Beispiel zeigst, wird für jede neue Verkettung ein neues String-Objekt im Speicher erstellt ( in deinem Fall 8, wenn ich mich nicht verzählt hab).
Der StringBuilder nutzt für die Verkettung einen Puffer, an dem der anzufügenden neue String angehängt wird, wenn der Puffer es zulässt. Nur wenn dies nicht möglich ist, wird ein neuer größerer Puffer erstellt und die bestehenden Daten und die neuen Daten in den neuen Puffer kopiert. Der alte Puffer wird dann freigegeben.
Mehr dazu unter http://msdn.microsoft.com/en-us/library/system.text.stringbuilder(VS.80).aspx
 
Hallo Ihr,

schlecht gesucht kann ich nicht sagen, denn die Seiten hatte ich schon gefunden, nur das mit dem verstehen ist eine andere Sache, deshalb wollte ich fragenob mir das jemand erklären bzw. ein Beispiel-Code einstellen kann.

Denn ich lese eine txt-Datei aus. Nun sollen die Datensätze in eine MySql DB geschreiben werden. (Anzahl und Bezeichnung der Spalten varriert).

Nun suche ich einfache Möglichkeit diese in SQL Befehle umzuwandeln die ich auch verstehe. ;)

z.B. string Befehl = "INSERT"
string ColumName = "X, Y, Z"
string Values = "X, Y, 123"
string TableName = "Customer"

Kann mir da jemand helfen?


Gerd
 
Hey Gerd,

bekommst du Spaltennamen und Werte als zusammenhängenden kommasparierten string oder anders? Du kannst dir das Leben hier einfacher machen wenn du dir ein Dictionary<string, object> liefern lässt, dieses dann durchläufst und dir die Query damit aufbaust:

Code:
private string getInsertQuery(Dictionary<string, object> fieldValueMapping, string tableName, out List<DbParameter> paramList)
{
  paramList = new list<DbParameter>();
  StringBuilder result = new StringBuilder("INSERT INTO ");
  result.Append(tableName);
  result.Append("({0}) VALUES ({1})");

  StringBuilder fields = new StringBuilder();
  StringBuilder fieldValues = new StringBuilder();

  foreach(KeyValuePair<string, object> mapping in fieldValueMapping)
  {
    fields.Append(mapping.key); // Trennzeichen nicht vergessen!
    fieldValues.Append("@" + mapping.key); // Trennzeichen nicht vergessen!

    paramList.Add(new SqlParameter(...)); // Hier fehlt mir gerad die Syntax um einen neuen SqlParameter zu erstellen
  }
  return string.Format(result.ToString(), fields, fieldValues);
}

Code ist ungetestet und eben gerad auf zwischen Arbeit und noch mehr Arbeit meinem Kopf entsprungen...
 
Zurück