Autor Beitrag
Lizzaran
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Sa 15.01.11 01:28 
Guten Tag,

ich schreibe zZ ein Datenbankverwaltungsprogramm, bzw scheitere nun am letztem Knackpunkt.
Es gibt eine Funktion die dem Anwender erlaubt eine neue Tabelle in einer Datenbank anzulegen,
mit einer undefinierten Anzahl von Columns (kann beliebig vom Nutzer ausgewählt werden).

Wenn man nun mit einem INSERT-Befehl Daten hinzufügen möchte, muss es ja wie folgt aussehen:

ausblenden C#-Quelltext
1:
2:
3:
4:
public static void insert(string table, string Vorname, string Nachname, string Alter)
{
    sqlconnect.ExecuteQuery("INSERT into " + table + " VALUES ('" + Vorname + "','" + Nachname+ "','" + Alter + "')");
}


Aber wenn der Nutzer nun z.b. eine Tabelle mit mehr / weniger als 3 Columns erstellt, funktioniert der Code natürlich nicht mehr.
Man könnte natürlich mehrere If-Abfragen machen:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
public static void insert(string table, string 1string 2string 3string usertblauswahl)
{
    if (usertblauswahl == 1)
    {
    sqlconnect.ExecuteQuery("INSERT into " + table + " VALUES ('" + 1 + "')"); //1 Columns
    }
    if (usertblauswahl == 2)
    {
    sqlconnect.ExecuteQuery("INSERT into " + table + " VALUES ('" + 1"','" + 2"')"); // 2 Columns
    }
    if (usertblauswahl == 3)
    {
    sqlconnect.ExecuteQuery("INSERT into " + table + " VALUES ('" + 1 + "','" + 2 + "','" + 3 + "')"); // 3 Columns
    }
}


Gibt es da keine bessere Lösung als +20 SQL-Statements vorzudefinieren?

MfG
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Sa 15.01.11 01:54 
Verwende ein Array und das Schlüsselwort params, um eine dynamische Parameterzahl zuzulassen:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
public static void Insert(string table, params string[] values) {
  string valuesString = (siehe unten);
  string query = "INSERT INTO " + table + " VALUES (" + valuesString + ")";
  sqlconnect.ExecuteQuery(query);
}

{
  Insert("abc""def""ghi""jkl");
}


Die Anführungszeichen und Kommas kannst du in einer Schleife hinzufügen:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
string valuesString = "";
foreach (string value in values) {
  if (valuesString != "")
    valuesString += ", ";
  valuesString += "\"" + value + "\"";
}

Allerdings solltest du dich mit SQL Injection befassen - sonst baust du eine sehr große Sicherheitslücke ein.

Grüße,
Yogu