Entwickler-Ecke
Datenbanken (inkl. ADO.NET) - Wie eine Variable in ein INSERT SQL Statement einbauen?
DennisXX - Sa 13.08.11 15:40
Titel: Wie eine Variable in ein INSERT SQL Statement einbauen?
Hallo !
Wie kann ich einem SQL Insert Statement einen Wert im C Sharp Code übergeben, der in einem Formular Textfeld eingegeben wurde?
Ich bekomme das bisher leider nur mit festen Werte hin. Kann mir jemand weiterhelfen?
Grüße
Dennis
Moderiert von
Th69: Kleine Rechtschreibfehler u.a. im Titel bereinigt
jaenicke - Sa 13.08.11 16:09
Eigentlich kannst du die einfach mit dem restlichen String verketten. :gruebel:
Wie hast du es denn jetzt?
DennisXX - Sa 13.08.11 19:35
Hallo nochmal !
Danke für den Link !
ich habe mir dort mal das folgende Codebsp. herausgepickt und dazu mal eine Frage. Was genau wird in der Zeile "sb.AppendLine("OUTPUT INSERTED.ID");" bewirkt? Die restliche Codezeile sind für mich halbwegs verständlich:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| public int AddEmployee(string lastName, string firstName, double sallary, DateTime birthday) { using (SqlConnection connection = new SqlConnection(ConnectionSting)) { connection.Open();
StringBuilder sb = new StringBuilder(); sb.AppendLine("INSERT INTO [Employees] ([LastName], [FirstName], [Sallary], [Birthday])"); sb.AppendLine("OUTPUT INSERTED.ID"); sb.AppendLine("VALUES (@LastName, @FirstName, @Sallary, @Birthday)");
using (SqlCommand cmd = new SqlCommand(sb.ToString(), connection)) { cmd.Parameters.AddWithValue("LastName", lastName); cmd.Parameters.AddWithValue("FirstName", firstName ?? Convert.DBNull); cmd.Parameters.AddWithValue("Sallary", sallary); cmd.Parameters.AddWithValue("Birthday", birthday);
return cmd.ExecuteNonQuery(); } } } |
Hat das eigentlich irgendeinen speziellen Grund, weshlab hier mit der Klasse StringBuiler gearbeitet wird und nciht mit der Klasse String?
Danke für die Hilfe !
Grüße
Dennis
Th69 - Sa 13.08.11 19:59
Hallo Dennis,
das "OUTPUT INSERTED.ID" gibt den Rückgabewert des SQL-Befehls an (in diesem Fall die mittels einer "Autoincrement"-Spalte erzeugte Id). Ich weiß aber nicht, ob dies alle Datenbanksysteme unterstützen.
Und den StringBuilder benutzt man, wie der Name schon sagt, zum Zusammensetzen von längeren Strings. Beim "+" von zwei Strings wird intern immer eine neuer String erzeugt und die Strings immer kopiert, während der StringBuilder im voraus Speicher reserviert, so daß nur selten intern der String kopiert werden muß (ist also eine Performanceverbesserung).
Und mit der StringBuilder.ToString()-Methode erhält man dann den zusammengesetzten String.
DennisXX - So 14.08.11 09:13
Hi Folks !
Ok die Argumentation mit der Klasse StringBuilder macht wirklich Sinn, besonders dann, wenn man längere Strings zusammenbaut denke ich mir mal.
Also das mit der Codezeile "sb.AppendLine("OUTPUT INSERTED.ID");" ist mir immernoch ncht ganz klar.
Ok, sie gibt einen autoinkrement Value zurück, aber wofür brauche ich diesen denn? Eigentlich muss doch das DBMS von sich aus erkennen, wann wo in der Datenbank der nächste einzutragene Tupel stattfinden soll oder sehe ich das falsch? Macht diese Spalte nciht mehr Sinn beim Auslesen der Daten aus einer Datenbank?
Greetz
Dennis
Trashkid2000 - So 14.08.11 19:28
Hallo,
naja, über die Verwendung des StringBuilder's kann man bei diesem Code streiten. Denn der String steht ja fest und muss nicht erst zusammengebaut werden.
Genauso gut kann ich es auch so schreiben:
C#-Quelltext
1: 2: 3: 4:
| string stmt = @"INSERT INTO [Employees] ([LastName], [FirstName], [Sallary], [Birthday]) OUTPUT INSERTED.ID VALUES (@LastName, @FirstName, @Sallary, @Birthday)"; |
Finde ich persönlich übersichtlicher. Und erzeugt auch nur einen String.
LG,
DennisXX - Mo 15.08.11 14:54
Hallo nochmal !!
Eine Frage nochmal zu den beiden Codezeilen:
Quelltext
1: 2:
| string strValueTextfield = txtValues.Text; String strCurrentSQLStatement = @"INSERT INTO [tbl_SQL_Statements] ([SQL_Statement]) VALUES (@strValueTextfield)"; |
Der Wert wird korrekt aus dem Textfeld des Forulars ausgelesen! Aber leider wird der Wert im SQL befhel nicht korrekt interpretiert. Verwende ich den evtl. nicht korrekt, fehlt da noch etwas?
Grüße
Dennis
Trashkid2000 - Di 16.08.11 19:07
DennisXX hat folgendes geschrieben : |
Verwende ich den evtl. nicht korrekt, fehlt da noch etwas? |
Ja, da fehlt einfach mal das Adden des Parameters zu dem Command. Wie setzt Du denn den Command ab?
Es müsste doch irgendwie so aussehen:
C#-Quelltext
1: 2: 3: 4: 5: 6:
| String strCurrentSQLStatement = @"INSERT INTO [tbl_SQL_Statements] ([SQL_Statement]) VALUES (@strValueTextfield)"; using (SqlCommand cmd = new SqlCommand(sb.ToString(), connection)) { cmd.Parameters.AddWithValue("@strValueTextfield", txtValues.Text); cmd.ExecuteNonQuery(); } |
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!