2016-05-06 4 views
-2

これは私の仕事です。問題はcmd.ExecuteNonQueryで発生します。Cmd executenonquery

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Data.SqlClient.SqlException: Incorrect syntax near the keyword 'Order'.

Source Error: Line 44:cmd.ExecuteNonQuery();

protected void Button2_Click(object sender, EventArgs e) 
{ 
    SqlCommand cmd = new SqlCommand("insert into Order values('" +DropDownList1.SelectedValue+"','" +DropDownList2.SelectedValue+ "','" +txtQuantity.Text+ "','" +DropDownList3.SelectedValue+ "','" +TextBox1.Text+ "')", con); 
    cmd.ExecuteNonQuery(); 
    con.Close(); 
    DropDownList1.SelectedValue= ""; 
    DropDownList2.SelectedValue = ""; 
    txtQuantity.Text = ""; 
    DropDownList3.SelectedValue= ""; 
    TextBox1.Text = ""; 
} 
+0

my TextBox1.Text = 'bob ');ドロップテーブル - ' –

+0

SQLインジェクションの脆弱性を削除することを検討してください。このようなサンプルコードは、プロトタイプコードでも恐ろしいものです。プロダクトにすることができるからです。それはあなたのワークベンチの上に横たわっているダイナマイトの棒を残すようなものです... – DVK

答えて

6

それはSQLがあなたのORDER表を見て、それがORDER BY文であることを想定している可能性がありますキーワード

に注意してください。これを解決するために、角括弧であなたのテーブル名を包む考えてみましょう:

INSERT INTO [Order] VALUES(...) 

パラメータ化、未連結

また、あなたはあなたのクエリを構築するために連結する代わりに、文字列のパラメータを使用することを検討する必要があり、それは一般的な構文を防ぐことができますエラーやSQLインジェクション攻撃などの意地の悪さからあなたを守る:

protected void Button2_Click(object sender, EventArgs e) 
{ 
    // Build your query 
    var query = "INSERT INTO [Order] VALUES(@V1,@V2,@Quantity,@V3,@V4)"; 
    // Build your command 
    using(var cmd = new SqlCommand(query,con)) 
    { 
      // Consider explicitly opening your connection if it isn't open 
      con.Open(); 

      // Add your parameters 
      cmd.AddWithValue("@V1",DropDownList1.SelectedValue); 
      cmd.AddWithValue("@V2",DropDownList2.SelectedValue); 
      cmd.AddWithValue("@Quantity",txtQuantity.Text); 
      cmd.AddWithValue("@V3",DropDownList3.SelectedValue); 
      cmd.AddWithValue("@V4",TextBox1.Text); 
      // Execute your query 
      cmd.ExecuteNonQuery(); 
      // Clear your parameters and other stuff here 
    } 
} 
-1

あなたは5つの値を挿入するために5列の名前を指定する必要があります。あなたは5つの値を書いただけで、どこに挿入するのですか?

insert order (column1, column2, column3, column4, column5) values(your code here) 

、このような何かを試してみて、あなたはより良い更なるためのインターネット上で検索したいです。

+0

列名は必須ではありません:https://en.wikipedia.org/wiki/Insert_%28SQL%29#Basic_form – Stijn

+0

ポイント。しかし、私は基本的な知識でサポートしようとしました。私は投票に値する悪いことをやったのですか?すべての人々は、彼らの出発時に基本的な知識が必要です。 wipipediaは常にリンクするのに適していません。 –

+0

https://msdn.microsoft.com/en-us/library/ms174335.aspx 列がcolumn_listにない場合、データベースエンジンは列の定義に基づいて値を提供できる必要があります。それ以外の場合は、行をロードできません。列の値が の場合、データベースエンジンは自動的に列の値を提供します。IDENTITYプロパティがあります。次の増分ID値が使用されます。 デフォルト値があります。列のデフォルト値が使用されます。 タイムスタンプデータ型があります。現在のタイムスタンプ値が使用されます。 null可能です。ヌル値が使用されます。 計算列です。計算された値が使用されます。 –

関連する問題