string DatabasePath = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\我的项目\C#\OnlyOne\database\data.mdb";DataSet ds = new DataSet();
OleDbConnection conn = new OleDbConnection(DatabasePath);
//加载邮件邮箱表
OleDbDataAdapter daBox = new OleDbDataAdapter();
daBox.SelectCommand = new OleDbCommand("SELECT * FROM 邮件邮箱",conn);
daBox.DeleteCommand = new OleDbCommand("DELETE FROM 邮件邮箱 WHERE 编号=?",conn);
daBox.DeleteCommand.Parameters.Add("@编号",OleDbType.Integer,int.MaxValue,"编号").SourceVersion = DataRowVersion.Current;
daBox.Fill(ds,"邮件邮箱");
ds.Tables["邮件邮箱"].PrimaryKey = new DataColumn[]{ds.Tables["邮件邮箱"].Columns["编号"]};//删除
DataRow row = ds.Tables["邮件邮箱"].Rows.Find(10);
ds.Tables["邮件邮箱"].Rows.Remove(row);
ds.AcceptChanges();
daBox.Update(ds,"邮件邮箱");

解决方案 »

  1.   

    我的表名:邮件邮箱,主键:编号上段代码进行后,ds(DataSet)里边的行是删除了,但是没办法更新数据库上的表。
      

  2.   

    不要使用ExecuteNonQuery()等直接操作数据库的方法,我现在需要改内存表,然后更新到数据库上。
      

  3.   

    DataRow row = ds.Tables["邮件邮箱"].Rows.Find(10);
    这句已经确认有编号为10的这个记录
      

  4.   

    ds.AcceptChanges();我认为你应该去掉这句
      

  5.   

    楼上的不对 ,在remove后要调用AcceptChanges。建议跟踪代码看看datarow的state是不是delete。在看看DeleteCommand 是否正确。
      

  6.   

    DataRow row = ds.Tables["邮件邮箱"].Rows.Find(10);
    Console.WriteLine(row.RowState.ToString());  //Unchanged
    ds.Tables["邮件邮箱"].Rows.Remove(row);
    Console.WriteLine(row.RowState.ToString());  //Detached
    ds.AcceptChanges();
    daBox.Update(ds,"邮件邮箱");
    已经有改了,DeleteCommand应该是没有错。string DatabasePath = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\我的项目\C#\OnlyOne\database\data.mdb";DataSet ds = new DataSet();
    OleDbConnection conn = new OleDbConnection(DatabasePath);
    conn.Open();
    OleDbCommand cmd = new OleDbCommand("DELETE FROM 邮件邮箱 WHERE 编号=10",conn);
    cmd.ExecuteNonQuery();
    conn.Close();
      

  7.   

    自己找出答案了。把remove改成delete就行。
    DataRow row = ds.Tables["邮件邮箱"].Rows.Find(14);
    row.Delete();
    daBox.Update(ds,"邮件邮箱");有两点
    ds.AcceptChanges();要去掉,不然在调用update时,不能反应出有进行更改的记录。
    panda2fw2(我爱Monkey) 兄。你可以用下边的方法自己试试。daBox.RowUpdated +=new OleDbRowUpdatedEventHandler(OnRowUpdate);
    private static void OnRowUpdate(object sender, OleDbRowUpdatedEventArgs e)
    {
    Console.WriteLine(e.Command.CommandText);
    }你会发现,如果是有进行AcceptChanges的话,不会输出任何东东的。不论怎样,谢谢两位。