1

C# を使用して mysql データベースにレコードを挿入しようとしていますが、常に次のエラー メッセージが表示されました。

SQL 構文にエラーがあります。'Order(idOrder, Quantity, Date, Menu_idMenu)VALUES(10002, '1', '3/17/2013' の近くで使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。 12:00' ライン 1

これはコードです:

foreach (DataGridViewRow row in dataGridView1.Rows)
{
    if (!row.IsNewRow)
     {
           com.CommandText = "INSERT INTO Order (idOrder, Quantity, Date, Menu_idMenu) VALUES (" + 10002 + ", '" +row.Cells[0].Value.ToString() + "', '"+DateTime.Today.ToString()+"', '" + row.Cells[1].Value.ToString() + "')";
           int insert = com.ExecuteNonQuery();
     }
}

どういう意味ですか?

4

2 に答える 2

1

クエリにキーワードが予約されていますOrder。それを引用して幸せになりましょう。

com.CommandText = "INSERT INTO `Order` (idOrder, Quantity, Date, Menu_idMenu) VALUES (" + 10002 + ", '" +row.Cells[0].Value.ToString() + "', '"+DateTime.Today.ToString()+"', '" + row.Cells[1].Value.ToString() + "')";

また、パラメーターを使用することをお勧めします。

于 2013-03-16T17:50:14.390 に答える
0

DateandOrderはMySQLの予約済みキーワードです。

間で使用する''

com.CommandText = "INSERT INTO `Order` (idOrder, Quantity, Date, Menu_idMenu) VALUES (" + 10002 + ", '" +row.Cells[0].Value.ToString() + "', '"+DateTime.Today.ToString()+"', '" + row.Cells[1].Value.ToString() + "')";

そして常にパラメータ化されたクエリを使用してください。この種のコードは、SQL インジェクション攻撃に対してオープンです。

実際には、Date引用符なしで使用できます。

MySQL では、以前は多くの人が使用していたため、一部のキーワードを引用符なしの識別子として使用することを許可しています。

パラメータ化されたクエリを使用することをお勧めします。ここでは、コードでそれを使用する方法を示します。

com.CommandText = "INSERT INTO `Order` (idOrder, Quantity, Date, Menu_idMenu) VALUES (@idOrder, @Quantity, @Date, @Menu_idMenu)";

com.Parameters.AddWithValue("@idOrder", "10002");
com.Parameters.AddWithValue("@Quantity", row.Cells[0].Value.ToString());
com.Parameters.AddWithValue("@Date", DateTime.Today.ToString());
com.Parameters.AddWithValue("@Menu_idMenu", row.Cells[1].Value.ToString());
于 2013-03-16T17:52:35.710 に答える