如下的语句,执行后报如下错误“违反并发性: UpdateCommand 影响了预期 1 条记录中的 0 条”。  在 row = da.Update(dt);  这句话报错! 同样的如下代码,我使用sqlserver 以及 Oracle 数据库,测试执行正常。 不清楚针对Access 数据库会有哪些细微的差别?        OleDbDataAdapter da;
        DataTable dt;
        private void button1_Click(object sender, EventArgs e)  //查询数据
        {
            string strSQL = "select KEY_ID, SHU_NAME from A01_TUSHU  where 1=1";
            da = new OleDbDataAdapter(strSQL, conn);
            dt = new DataTable();
            da.Fill(dt);
            dataGridView1.DataSource = dt;
            dataGridView1.AllowUserToAddRows = false;
            dataGridView1.Columns[0].ReadOnly = true;  //第一列是主键,不修改
            dataGridView1.Columns[1].ReadOnly = false; //修改第二列的内容
        }        private void button2_Click(object sender, EventArgs e)   //修改数据
        {
            int row = 0;
            string strSQL = "update A01_TUSHU set SHU_NAME=@SHU_NAME where KEY_ID=@KEY_ID";
            da.UpdateCommand = new OleDbCommand (strSQL, conn);
            OleDbParameter KEY_ID = da.UpdateCommand.Parameters.Add("@KEY_ID", OleDbType.VarChar ,20,"KEY_ID");
            KEY_ID.SourceVersion = DataRowVersion.Original;            da.UpdateCommand.Parameters.Add("@SHU_NAME", OleDbType.VarChar, 50, "SHU_NAME");
            da.UpdateCommand.UpdatedRowSource = UpdateRowSource.None;    //这句话不清楚起什么作用            MessageBox.Show(strSQL);  //怎样调试显示出来 实际执行的语句?
            row = da.Update(dt);
            MessageBox.Show("成功更新行数: " + row.ToString(), "提示信息");
        }

解决方案 »

  1.   

    在执行da.update(dt)前,数据发生了改变
      

  2.   

    数据没有发生改变。我直接在 bin\debug 下面执行还是报错的。
      

  3.   

    不用看你的代码,access是支持单用户访问的,和其他数据库不一样,所以他简单,但是不实用。换个数据库吧
      

  4.   

    自动编号字段
    DeleteCommand的问题:检查是否含有自动编号字段   
    UpdateCommand的问题:检查更新的字段的原始值是否为空值
    DataSet ds = new DataSet();
    SqlDataAdapter sda;SqlCommandBuilder scb = new SqlCommandBuilder(sda);
    sda.Update(ds);
    this.dataGridView1.DataSource = ds.Tables[0];