private void btndelete_Click(object sender, EventArgs e)
        {
            //SQL中删除语句
            string sqldelete = "Delete from PsInfo where Id= @Id";
            //初始化deletecommand
            sqlda.DeleteCommand = new SqlCommand(sqldelete, con);
            //声明参数并制定数据库的列和版本
            p = sqlda.DeleteCommand.Parameters.Add("@Id", SqlDbType.VarChar);
            p.SourceColumn = "Id";
            p.SourceVersion = DataRowVersion.Original;
            //初始化DialogResult
            dr = MessageBox.Show("您确定要删除当前记录吗?", "确定", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            //如果给出肯定的相应,则删除
            if (dr == DialogResult.Yes)
            {
                try
                {
                    //确定选定的行
                    ds.Tables[0].Rows[dataGridView1.CurrentRow.Index].Delete();
                    sqlda.Update(ds, "PsInfo");       //这个错误。。违反并发性: DeleteCommand 影响了预期 1 条记录中的 0 条。
                    MessageBox.Show("删除成功");
                }
                catch (SqlException ex)
                {
                    //显示错误信息
                    MessageBox.Show(ex.Message);
                }
            }
            else
            {
                return;
            }
        }

解决方案 »

  1.   

    先删除DB数据,然后再重新fill你的dataset不行么
      

  2.   

    自己写的DeleteCommand ?
    你先看看ID那一列有没有设为主键
      

  3.   

    sqlda.Update(ds, "PsInfo"); 这一句之前加上下面这一句:
    SqlCommandBuilder Builder = new SqlCommandBuilder(sqlda);
      

  4.   

    DeleteCommand的问题:检查是否含有自动编号字段
    更新数据集的时候,前面的记录更新时是否修改了后面的记录,后面的记录再来更新时,导致出错。 
    检查是否设有主键。 
    检查更新的字段的原始值是否为空值 
    adapter实现数据更新
      

  5.   

    SqlCommandBuilder Builder = new SqlCommandBuilder(sqlda); 
    sqlda.Update(ds, "PsInfo"); 这一句之前加上下面这一句: 
    不懂