')'の近くの構文が正しくありません。値をデータベースに挿入しようとしているとき

私は新しく、これが私の最初の質問です。

私はデータベースに値を挿入しようとしていると私はエラーメッセージが表示されます

')'の近くに構文が正しくありません。

cmd.ExecuteNonQuery()が強調表示されます。ここに私のコードです:

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

4 答え

まず、決してしないで、このようなSQLクエリを決して決して絶対にしないでください。パラメータ化されたクエリを代わりに使用します。

第二に、sqlコマンドに "VALUES"がありません。

INSERT INTO orders VALUES ( .... )

編集:

第3に、marc_sが示唆するように、カラム名も指定することをお勧めします。そうすれば、後でいくつかの驚きを避けることができます。

8
追加された
さらに、 INSERT ステートメントに明示的な列リストを指定する場合は、常にを追加します: INSERT INTO dbo.Orders(Col1、Col2、Col3、.... )VALUES(VAl1、Val2、Val3、.....)
追加された 著者 marc_s,
@ user1477362 スタックオーバーフローへようこそ - 各回答の横にホロのCheckBoxがありますので、数点を挙げてください。ちょうど、皆さん、混乱の原因となったVALUESとColumnの名前を省略することができます。このように: INSERT INTO ORDERS(SELECT '"+ IDProduct.Text +"') "
追加された 著者 Jeremy Thompson,
@ marc_s、良い点、ありがとう。それを私の答えに加えました。
追加された 著者 walther,
しかし、そのようなコードはSQLインジェクション攻撃に対して非常に脆弱です( IDProduct.Text の値がである可能性があるためです); DELETE FROM ORDERS WHERE 1 = 1 ;; "/code>で指定された順序が反映されないため、select文が突然動作しなくなります(Orderの列の順序が IDProduct.Text で指定された順序を反映しないため)。これは、パラメータ化されたクエリが必要な明確なケースです。
追加された 著者 Troy Alford,
みんな、ありがとう。それは本当に速かった。
追加された 著者 user1477362,

SQL文INSERT INTOの構文には2つの形式があります

列名は指定しないでください

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

または列名と値の両方を指定します

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

すべてのフィールド値が指定されている場合、最初のケースを使用する必要があります。
2番目のケースは、特定の列の値を挿入する場合に使用する必要があります

2
追加された

値を使用する必要があります。

INSERT INTO table_name
VALUES (value1, value2, value3,...)
1
追加された

クエリの構文の挿入は次のとおりです。

insert into <tablename> values(col1 ,col2 )

values が見つからなかったため、この行を修正してください:

 cmd = New SqlCommand("INSERT INTO orders values ('" + IDProduct.Text + "')", con)
0
追加された
私は正しい挿入クエリの構文は、 insert into <tablename>(col1、col2)VALUES(@ col1、@ col2)ですか?
追加された 著者 WTFZane,