2017-03-28 12 views
1

Textboxからデータを編集できる更新ボタンを作成しようとしています。私はAccessデータベースを使用しており、いくつか問題があり、更新できません。CでAccessデータベースを更新できません

ベローは私のコードです:

private void cmdUpdate_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     con = new OleDbConnection(cs.DBConn); 
     con.Open(); 

     string queryUpdate = @"UPDATE tblFixing SET [email protected], [email protected], [email protected], [email protected], [email protected], [email protected] WHERE [email protected]"; 
     cmd = new OleDbCommand(queryUpdate); 
     cmd.Connection = con; 

     cmd.Parameters.Add(new OleDbParameter("@FixID", OleDbType.WChar, 20, "FixID")); 
     cmd.Parameters.Add(new OleDbParameter("@Title", OleDbType.WChar, 255, "Title")); 
     cmd.Parameters.Add(new OleDbParameter("@CodeBefore", OleDbType.WChar, 0, "CodeBefore")); 
     cmd.Parameters.Add(new OleDbParameter("@CodAfter", OleDbType.WChar, 0, "CodAfter")); 
     cmd.Parameters.Add(new OleDbParameter("@Exp", OleDbType.WChar, 0, "Exp")); 
     cmd.Parameters.Add(new OleDbParameter("@Example", OleDbType.WChar, 0, "Example")); 
     cmd.Parameters.Add(new OleDbParameter("@Notes", OleDbType.WChar, 255, "Notes")); 

     cmd.Parameters["@FixID"].Value = cmbID.Text.Trim(); 
     cmd.Parameters["@Title"].Value = txtTitulo.Text.Trim(); 
     cmd.Parameters["@CodBefore"].Value = rchCodBefore.Text.Trim(); 
     cmd.Parameters["@CodAfter"].Value = rchCodAfter.Text.Trim(); 
     cmd.Parameters["@Exp"].Value = rchExplicacao.Text.Trim(); 
     cmd.Parameters["@Example"].Value = rchExemplo.Text.Trim(); 
     cmd.Parameters["@Notes"].Value = rchNotas.Text.Trim(); 

     cmd.ExecuteNonQuery(); 
     MessageBox.Show("Successful updated", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information); 

     con.Close(); 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show("Error\nDetails: " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
    } 
} 

私はコードをデバッグし、それはデータが更新されませんが、すべてを行います。私は何をすべきか?

+0

あなたの文字列は 'queryUpdate'は、その後、あなたが使う' CMD =新しいのOleDbCommand(queryInsert)です; '。これはタイプミスですか? – Equalsk

+2

'cmd.ExecuteNonQuery'が0より大きい値を返した場合、クエリは機能し、間違ったデータベースを調べている可能性があります。 – LarsTech

+0

すでに編集されていますが、それは問題ではありません。 @Equalsk – Miggs

答えて

2

OleDBは名前付きパラメータを使用しません。インデックス順に表示されます。

あなたは最初のパラメータとして@FixIDパラメータを持っているをコレクションに追加していますが、SQL文字列を見ると、それは文字列で最後のパラメータです。

変更パラメータ・オーダー:

cmd.Parameters.Add(new OleDbParameter("@Title", OleDbType.WChar, 255, "Title")); 
cmd.Parameters.Add(new OleDbParameter("@CodeBefore", OleDbType.WChar, 0, "CodeBefore")); 
cmd.Parameters.Add(new OleDbParameter("@CodAfter", OleDbType.WChar, 0, "CodAfter")); 
cmd.Parameters.Add(new OleDbParameter("@Exp", OleDbType.WChar, 0, "Exp")); 
cmd.Parameters.Add(new OleDbParameter("@Example", OleDbType.WChar, 0, "Example")); 
cmd.Parameters.Add(new OleDbParameter("@Notes", OleDbType.WChar, 255, "Notes")); 
cmd.Parameters.Add(new OleDbParameter("@FixID", OleDbType.WChar, 20, "FixID")); 
+0

それは私の問題を解決しました。大いに感謝する – Miggs

関連する問題