2011-12-29 6 views
0

を複数のテキストボックスを使用するときに私のコードは、この例外がスローされます。例外Accessデータベースを更新するためにC#で

UPDATE文で

構文エラー

私のSQL構文と間違って何?どうすれば修正できますか?

私はVisual Studio 2010とAccessデータベースを使用しています。ここに私のコードです:「)」が

private void CBM_editButton_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     // to edit or update already existing informations 
     OleDbConnection con = new OleDbConnection(); 
     con.ConnectionString = 
      @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Sunquick\Desktop\c sharp project2\ContactBook2.mdb"; 

     OleDbCommand com = new OleDbCommand(); 
     com.CommandText = "UPDATE ContactList set Name='" + CBM_textbox1.Text + 
      "','" + CBM_textbox2.Text + "','" + CBM_textbox3.Text + 
      "','" + CBM_textbox4.Text + "','" + CBM_textbox5.Text + "'"; 

     com.Connection = con; 
     con.Open(); 
     com.ExecuteNonQuery(); 

     MessageBox.Show("Data has been changed"); 
     con.Close(); 
    } 
    catch(Exception Error) 
    { 
     MessageBox.Show(Error.ToString()); 
    } 

    CBM_textbox1.Text = ""; 
} 
+2

UPDATEの最後には ')'があり、その上にWHERE句がありません。 –

+3

セキュリティのヒント:アプリケーションでSQLインジェクション攻撃を回避するには、パラメータ化されたクエリの使用を検討してください。 –

+0

「mu is too short」と「Espen Burud」のおかげで、あなたは本当に私を助けました! C-Sherpの私の最初の個別クラスプロジェクト!最後に、皆さんの助けを借りて、私はそれを提出するつもりです! – Sunquick

答えて

2
com.CommandText = "UPDATE ContactList set Name='" + CBM_textbox1.Text + 
    "', Email='" + CBM_textbox2.Text + "', Mobile='" + CBM_textbox3.Text + 
    "', Country='" + CBM_textbox4.Text + "', City='" + CBM_textbox5.Text + "')" 

第二の最後の文字に - あなたが更新しているので、どこそれはまた

(から来た、あなたは、where句を持っていません

+0

うん、それはまさに私が推測していることです。 – Jens

+0

また、パラメータ化されたクエリを使用していないため、テキストボックス内のテキストをクエリに「挿入」することもできます。これは、(CBM_Textbox5の)値を 'Canton;ドロップテーブルContactList ' –

+0

J. Vermeireありがとう、ありがとうRay K!あなたたちは本当に私を助けました! c-Sherpの最初の個別クラスプロジェクト!最後に、皆さんの助けを借りて、私はそれを提出するつもりです! – Sunquick

2

テキストボックスに1つの引用符を含むテキストが含まれていると、無効なSQL文が作成されます。

他にも指摘されているように、パラメータ化されたクエリを使用できます。それにもかかわらず、私はあなたに文字列バージョンを示します。

string sql = String.Format(
    "UPDATE ContactList SET Name={0}, Email={1}, Mobile={2}, Country={3}, City={4}", 
    SqlStr(CBM_textbox1.Text), 
    SqlStr(CBM_textbox2.Text), 
    SqlStr(CBM_textbox3.Text), 
    SqlStr(CBM_textbox4.Text), 
    SqlStr(CBM_textbox5.Text) 
); 

あなたのSQLの例では、末尾に「)」余分持ち、WHERE文が欠落しているので、それが更新されます:

それはこのヘルパー関数を使用しています

private string SqlStr(string s) 
{ 
    if (String.IsNullOrEmpty(s)) { 
     return "NULL"; 
    } 
    return "'" + s.Replace("'", "''") + "'"; 
} 

これを試してみてください全体のテーブル!

"... WHERE id=77" 

また、レコードを追加しようとしている可能性がありますか?そのような場合は、次のようなものを使用してください。

+0

「Olivier Jacot-Descombes」ありがとう、本当に助けてくれました! c-Sherpの最初の個別クラスプロジェクト!最後に、あなたのすべての助けを借りて!すごい仕事! :) – Sunquick