2016-08-03 16 views
-2

Wie können Sie Daten zu einer bestimmten Zeile in einer Datenbank hinzufügen, indem Sie die Klausel where verwenden.Einfügen von Daten in die SQL-Datenbank mit der Where-Klausel

Hier ist, was ich versucht:

"Insert into table1 (name, address) values ('" + textbox1.Text+ "', '"+textbox2.Text+"') 
where (name ='"+textbox1.Text+"')" 
+1

Was genau "hat nicht funktioniert"?Welchen Fehler hast du bekommen? – Alex

+0

Was ist Windows Form hier? – elyashiv

+3

Mögliches Duplikat von [Wie mit where-Klausel einzufügen] (http://stackoverflow.com/questions/545593/how-to-insert-with-where-clause) –

Antwort

1

Sie können nicht mit einem ‚wo‘ Klausel inseert einfügen für das Hinzufügen neuer Datensätze ist. Wenn Ihre Aktualisierung verwenden dann:

Update table1 set 
name = '" + textbox1.Text + "', 
address ='" + textbox2.Text+ "' 
where (name ='"+textbox1.Text+"') 

oder Einsatz sollte sein:

"Insert into table1 (name, address) values ('" + textbox1.Text+  
"','"+textbox2.Text+"')" 

jedoch sicherzustellen, dass alles gegen SQL-Injection validiert. oder parametriere das Obige.

+0

ist es wahrscheinlich besser, die Parametrisierung zu demonstrieren, als eine Lösung bereitzustellen, die dieselben Fehler wie der ursprüngliche Benutzer verwendet. – Takarii

4

Erstens, verketten Sie niemals Strings für die Datenbankeingabe. Sie sind offen für SQL Injection-Angriffe. Weitere Informationen finden Sie unter this MSDN article

Zweitens führen Sie keine Einsätze mit einer WHERE Klausel. Sie könnten ein UPDATE mit WHERE

Beispiele tun:

INSERT INTO TABLE (col1, col2) VALUES (val1, val2) 

UPDATE TABLE SET col1 = val1, col2 = val2 WHERE col3 = somevalue 

zum Beispiel in Ihrem Fall würden Sie dies für einen Einsatz schreiben möchten (einschließlich Parameter)

sql = "INSERT INTO table1 (name, address) VALUES (@textbox1,@textbox2)"; 

SqlCommand query = new SqlCommand("connection string", sql); 

query.Parameters.AddWithValue(@textbox1, textbox1.Text); 
query.Parameters.AddWithValue(@textbox2, textbox2.Text); 

Wenn Sie wissen, Verwenden Sie anstelle von AddWithValue stattdessen die folgende Syntax für den Datenbankfeldtyp:

query.Parameters.Add(@parametername, SqlDBType.Type,size).Value = somevalue; 

Dabei ist SqlDBType.Type der Datenbankfeldtyp (z. B. VarChar, Int, VarBinary usw.) und size ist der Wert des Felds. Wenn meine DB Feld VarChar (500) war, dann wäre meine Parametereinstellung

query.Parameters.Add(@parametername, SqlDBType.VarChar, 500).Value = somevalue; 

Sie die SQL-Zeichenfolge mit dem folgenden ersetzen können, wenn Sie nicht einfügen aktualisieren mögen. Beachten Sie, Datensätze mit einem Bezeichner zu aktualisieren - es wäre eine schlechte Übung, name als Ihre WHERE-Klausel zu verwenden.

sql = "UPDATE table1 SET name = @textbox1, address = @textbox2 WHERE xyz"; 

Parameter verhindern, dass Benutzer unerwartete Werte in Felder eingeben, die die Ausführung von nicht autorisiertem Code ermöglichen. Wenn Sie eine verkettete Zeichenfolge wie derzeit verwenden, kann ein Angreifer möglicherweise Ihre gesamte Datenbank gefährden.

+0

Upvoted, aber ich würde vorschlagen, [Parameter.Add] (https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.parameters (v = vs.110) .aspx) anstelle von AddWithValue, damit Sie den SqlDbType Ihres Parameters angeben können. Es ist bekannt, dass AddWithValue einige Probleme in bestimmten AFAIK-Szenarien verursacht, die auf alten verwandten Fragen basieren. –

+0

nur weil ich nicht wusste, was der dbtype war. Andernfalls würde ich immer mit sqldbtype.type hinzufügen, meine Antwort aktualisieren, um das zu widerspiegeln. – Takarii

0

Sie benötigen keine where-Klausel zum Einfügen eines Datensatzes in die SQL Server-Datenbank mit der Anweisung INSERT. Sie sollten Ihren Code wie unten ändern, damit es funktioniert: wie unten

"Insert into table1 (name, address) values ('" + textbox1.Text+ "', '"+textbox2.Text+"') 

Zwei mögliche Formen einer SQL INSERT-Anweisung sind:

INSERT INTO table_name (column1,column2,column3,...) 
VALUES (value1,value2,value3,...); 


INSERT INTO table_name 
VALUES (value1,value2,value3,...); 

Sie können hier mehr über INSERT SQL-Anweisung erfahren:

http://www.w3schools.com/sql/sql_insert.asp