4

アクセス 2003 対 2010 c#

どこが間違っているのかわかりません。エラーはありませんが、データは更新されていません。挿入、削除、編集は機能していますが、なぜこれが機能しないのかわかりません。誰か親切にここで私を助けてください、事前に感謝します...

接続文字列

 myCon = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data 
 Source=C:..\TempDB.mdb");

更新方法...

    private void btnUpdate_Click(object sender, EventArgs e)
    {
        OleDbCommand cmd = new OleDbCommand();
        cmd.CommandType = CommandType.Text;

        cmd.CommandText = "UPDATE [Family] SET [FirstName] = ?, [LastName] = ?, [FamilyDOB] = ?, [Medical] = ? WHERE [ID] = ?";
        //tried this as well
        //cmd.CommandText = "UPDATE [Family] SET [FirstName] = FirstName, [LastName] = @LastName, [DOB] = @StudentDOB, [Medical] = @Medical WHERE [ID] = @ID";
        cmd.Parameters.AddWithValue("@ID", txtFamID.Text);
        cmd.Parameters.AddWithValue("@FirstName", txtFirstName.Text);
        cmd.Parameters.AddWithValue("@LastName", txtLastName.Text);
        cmd.Parameters.AddWithValue("@FamDOB", txtFamDOB.Text);
        cmd.Parameters.AddWithValue("@Medical", txtMedical.Text);

        cmd.Connection = myCon;
        myCon.Open();
        cmd.ExecuteNonQuery();
        myCon.Close();
    }
4

2 に答える 2

7

パラメータ値は、SQL ステートメントに表示されるのと同じ順序で指定します。

cmd.Parameters.AddWithValue("@FirstName", txtFirstName.Text);
cmd.Parameters.AddWithValue("@LastName", txtLastName.Text);
cmd.Parameters.AddWithValue("@FamDOB", txtFamDOB.Text);
cmd.Parameters.AddWithValue("@Medical", txtMedical.Text);
cmd.Parameters.AddWithValue("@ID", txtFamID.Text);

OleDB と MS Access では、パラメーター名は考慮されず、順序のみが考慮されます。

于 2013-03-11T18:55:12.343 に答える
3

OLE DB.NET Framework Data Provider は、名前付きパラメーターの代わりに、疑問符 (?) でマークされた位置パラメーターを使用します。

これを変える:

    cmd.Parameters.AddWithValue("@ID", txtFamID.Text);
    cmd.Parameters.AddWithValue("@FirstName", txtFirstName.Text);
    cmd.Parameters.AddWithValue("@LastName", txtLastName.Text);
    cmd.Parameters.AddWithValue("@FamDOB", txtFamDOB.Text);
    cmd.Parameters.AddWithValue("@Medical", txtMedical.Text);

に:

    cmd.Parameters.AddWithValue("?", txtFamID.Text);
    cmd.Parameters.AddWithValue("?", txtFirstName.Text);
    cmd.Parameters.AddWithValue("?", txtLastName.Text);
    cmd.Parameters.AddWithValue("?", txtFamDOB.Text);
    cmd.Parameters.AddWithValue("?", txtMedical.Text);

詳細: OleDbParameter クラス

于 2013-03-11T18:29:01.423 に答える