2011-09-20 18 views
0

C#.netでコーディングするときとOleDbCommandを使用するときに、UPDATEステートメントの正しい構文を理解しようとしていました。私は正しいと感じていますが、私はまだエラーが発生しているため、間違いなく、 "UPDATE文の構文エラー"となります。私のコードは私の更新ボタンの下に掲載されています。私は多くのサイト(Stackoverflowを含む)をチェックして、正しい構文と標準がSQL文を作成するためのものであるかどうかを確認しましたが、まだ構文エラーを出さないものは見つかりませんでした。どんな提案も役に立ちます。ありがとう!UPDATE文の構文エラーVisual Studio C#.net

private void update_button_Click(object sender, EventArgs e) 
    { 
     String ssize = ""; 
     foreach (Control control in Controls) 
     { 
      if (control != null && control is RadioButton) 
      { 
       RadioButton radio = control as RadioButton; 
       if (radio.Checked == true) 
       { 
        ssize = control.Text; 
       } 
      } 
     } 
     OleDbConnection myCon = new OleDbConnection(connString); 
     OleDbCommand cmd = new OleDbCommand(); 
     cmd.CommandType = CommandType.Text; 
     cmd.CommandText = "UPDATE Youth SET FName = ?, MI = ?, LName = ?, Street = ?, CityStateZip = ?, PG = ?, HomePN = ?, WorkPN = ?, CellPN = ?, YEmail = ?, PGEmail = ?, Age = ?, DOB = ?, HS = ?, Grade = ?, PrevExp = ?, SSize = ?, Allergies = ?, MedConditions = ?, Avail = ?, FirstDep = ?, SecDep = ?, ThirdDep = ?, Fundraiser_1 = ?, Fundraiser_2 = ?, Fundraiser_3 = ?, Fundraiser_4 = ?, WHERE ID = ?"; 
     cmd.Parameters.Add("@FName", OleDbType.VarChar).Value = fname_tb.Text; 
     cmd.Parameters.Add("@MI", OleDbType.VarChar).Value = mi_tb.Text; 
     cmd.Parameters.Add("@LName", OleDbType.VarChar).Value = lname_tb.Text; 
     cmd.Parameters.Add("@Street", OleDbType.VarChar).Value = address1_tb.Text; 
     cmd.Parameters.Add("@CityStateZip", OleDbType.VarChar).Value = address2_tb.Text; 
     cmd.Parameters.Add("@PG", OleDbType.VarChar).Value = pg_tb.Text; 
     cmd.Parameters.Add("@HomePN", OleDbType.VarChar).Value = homePN_tb.Text; 
     cmd.Parameters.Add("@WorkPN", OleDbType.VarChar).Value = workPN_tb.Text; 
     cmd.Parameters.Add("@CellPN", OleDbType.VarChar).Value = cellPN_tb.Text; 
     cmd.Parameters.Add("@YEmail", OleDbType.VarChar).Value = yemail_tb.Text; 
     cmd.Parameters.Add("@PGEmail", OleDbType.VarChar).Value = pgemail_tb.Text; 
     cmd.Parameters.Add("@Age", OleDbType.VarChar).Value = age_tb.Text; 
     cmd.Parameters.Add("@DOB", OleDbType.Date).Value = bd_picker.Text; 
     cmd.Parameters.Add("@HS", OleDbType.VarChar).Value = hs_tb.Text; 
     cmd.Parameters.Add("@Grade", OleDbType.Integer).Value = grade_tb.Text; 
     cmd.Parameters.Add("@PrevExp", OleDbType.Integer).Value = prevexp_tb.Text; 
     cmd.Parameters.Add("@SSize", OleDbType.VarChar).Value = ssize; 
     cmd.Parameters.Add("@Allergies", OleDbType.VarChar).Value = food_tb.Text; 
     cmd.Parameters.Add("@MedConditions", OleDbType.VarChar).Value = special_tb.Text; 
     cmd.Parameters.Add("@Avail", OleDbType.VarChar).Value = week1_tb.Text + "," + week2_tb.Text; 
     cmd.Parameters.Add("@FirstDep", OleDbType.Date).Value = deposit_picker.Text; 
     cmd.Parameters.Add("@SecDep", OleDbType.Date).Value = second_picker.Text; 
     cmd.Parameters.Add("@ThirdDep", OleDbType.Date).Value = third_picker.Text; 
     cmd.Parameters.Add("@Fundraiser_1", OleDbType.Date).Value = fund1Picker.Text; 
     cmd.Parameters.Add("@Fundraiser_2", OleDbType.Date).Value = fund2Picker.Text; 
     cmd.Parameters.Add("@Fundraiser_3", OleDbType.Date).Value = fund3Picker.Text; 
     cmd.Parameters.Add("@Fundraiser_4", OleDbType.Date).Value = fund4Picker.Text; 
     cmd.Parameters.Add("@ID", OleDbType.Integer).Value = idTB.Text; 

     cmd.Connection = myCon; 
     try 
     { 
      myCon.Open(); 
      cmd.ExecuteNonQuery(); 
      myCon.Close(); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show("Problem opening connection!\n" + ex.Message, "Exception"); 
     } 
    } 
+0

[SSCCE後](http://sscce.org/)。具体的には、コードサンプルを管理しやすいサイズにすることをお勧めします。そうすることで、自分自身の答えを見つけた可能性があります。 –

+0

ちょっとした提案 - 構文エラーをデバッグするときは、より小さなセットで作業し、すべてのフィールドではなく1つのフィールドを更新してください。そのように簡単です。 – Beth

+0

@Michael:コードの意味を変えずにこれをもっと小さくするにはどうすればよいですか? –

答えて

4

sqlのWHERE句の前にカンマがあります。

cmd.CommandText = "UPDATE Youth SET FName = ?, MI = ?, LName = ?, Street = ?, 
    CityStateZip = ?, PG = ?, HomePN = ?, WorkPN = ?, CellPN = ?, YEmail = ?, 
    PGEmail = ?, Age = ?, DOB = ?, HS = ?, Grade = ?, PrevExp = ?, SSize = ?, 
    Allergies = ?, MedConditions = ?, Avail = ?, FirstDep = ?, SecDep = ?, 
    ThirdDep = ?, Fundraiser_1 = ?, Fundraiser_2 = ?, Fundraiser_3 = ?, 
    Fundraiser_4 = ?, <<--- extra comma 
    WHERE ID = ?"; 
+0

うわー!ありがとうございました!!ほとんどの場合、コピーステートメントは非常に長いので、コピー貼りタイプのエラーですが、もう一度感謝します! – Brandon

2

あなたのエラー(またはそれらの少なくとも1つが)右ここにある:?

Fundraiser_4 = どこ...

削除、?

関連する問題