Onjuiste syntaxis bij ')'. wanneer u probeert waarden in de database in te voegen

Ik ben nieuw en dit is mijn eerste vraag.

Ik probeer een waarde in de database in te voegen en krijg de foutmelding

Onjuiste syntaxis bij ')'.

en cmd.ExecuteNonQuery() wordt gemarkeerd. Hier is mijn code:

con.Open()
cmd = New SqlCommand("INSERT INTO orders ('" + IDProduct.Text + "')", con)
cmd.ExecuteNonQuery()
con.Close()
2

4 antwoord

Ten eerste, bouw NOOIT , NOOIT NOOIT sql-query's zoals deze. Gebruik in plaats daarvan geparametriseerde query's.

Ten tweede mis je "VALUES" in je SQL-opdracht.

INSERT INTO orders VALUES ( .... )

bewerken

Ten derde is het, zoals marc_s suggereert, een goed idee om ook kolomnamen op te geven. Op die manier kunt u later enkele verrassingen vermijden.

8
toegevoegd
Plus, ik zou willen toevoegen: altijd specificeer een expliciete kolomlijst in je INSERT statement: INSERT INTO dbo.Orders (Col1, Col2, Col3, .... ) VALUES (VAl1, Val2, Val3, .....)
toegevoegd de auteur marc_s, de bron
@ user1477362 Welkom bij Stack Overflow - er is een holo CheckBox naast elk antwoord, aankruisen geeft je een aantal punten. Gewoon een FYI guys, je kunt de VALUES en Kolom namen weglaten die de oorzaak van verwarring kunnen zijn geweest. Vind dit leuk: INSERT IN ORDERS (SELECT '"+ IDProduct.Text +"') "
toegevoegd de auteur Jeremy Thompson, de bron
@marc_s, goed punt, bedankt. Toegevoegd dat ook aan mijn antwoord.
toegevoegd de auteur walther, de bron
Jeremy, ja - code is echter erg kwetsbaar voor SQL-injectie-aanvallen (omdat de waarde van IDProduct.Text "kan zijn; VERWIJDEREN VAN BESTELLINGEN WAAR 1 = 1 ;;" ) en - als het schema verandert, werkt de geselecteerde instructie plotseling niet meer (omdat de volgorde van kolommen in Orders nu niet overeenkomt met de volgorde die is opgegeven in IDProduct.Text ). Dit is een duidelijk geval waarin Parameter-queries een noodzaak zijn.
toegevoegd de auteur Troy Alford, de bron
Bedankt iedereen. Dat was echt snel.
toegevoegd de auteur user1477362, de bron

De syntaxis voor de SQL-instructie INSERT INTO heeft twee vormen

U geeft niet de kolomnamen op

INSERT INTO table VALUES (value1, value2, value3,...)

of u geeft zowel de kolomnamen als de waarden op

INSERT INTO table (col1, col2, col3,...)
             VALUES (value1, value2, value3,...)

Het eerste geval moet worden gebruikt wanneer alle veldwaarden zijn opgegeven.
Het tweede geval moet worden gebruikt wanneer u de waarden voor specifieke kolommen wilt invoegen

2
toegevoegd

Waarden moeten worden gebruikt:

INSERT INTO table_name
VALUES (value1, value2, value3,...)
1
toegevoegd

Query van invoegtoepassingen invoegen is:

insert into <tablename> values(col1 ,col2 )

je hebt waarden gemist, daarom krijg je een fout bij het wijzigen van deze regel:

 cmd = New SqlCommand("INSERT INTO orders values ('" + IDProduct.Text + "')", con)
0
toegevoegd
Ik denk dat de juiste syntaxis voor invoegvragen invoegen in <tablename> (col1, col2) VALUES (@ col1, @ col2) is?
toegevoegd de auteur WTFZane, de bron