如何删除datatable中的一行数据呢?
private void button3_Click(object sender, EventArgs e)
{
//删除一条数据
ndr = ndt.Rows[dataGridView1.SelectedRows[0].Index];
ndt.Rows.Remove(ndr);
sda.Update(ndt);
}
为何这样操作后,数据库中的数据还存在呢
------解决方案--------------------ndt是什么,表还是数据集
------解决方案--------------------你都没用更新数据库,数据库中的数据肯定还在啊!
------解决方案--------------------string emailSql="select email,validFlag from emailMe";
DataSet emailAdd=new DataSet();
SqlDataAdapter emailAdapter=new SqlDataAdapter(emailSql,myConn);
SqlCommandBuilder cb=new SqlCommandBuilder(emailAdapter);
emailAdapter.Fill(emailAdd,"address");
myConn.Close();
DataTable myDt=emailAdd.Tables["address"];
myDt.PrimaryKey=new DataColumn[]{myDt.Columns["email"]};
......//修改myDs数据
emailAdapter.Update(emailAdd,"address");
------解决方案--------------------你都从来没有delete from biao where..
指定的数据库的那行数据凭什么消失啊?
------解决方案--------------------调试,断点打在
sda.Update(ndt);
这句
看一下你sda的DeleteCommand值是否是正确的delete语句
而且,你只需要ndr.Delete()就可以了
具体你看下你ndr对应的RowState是否标记为删除就知道了
用DataAdapter更新数据库有两个要求
1、有对应的Insert/Update/DeleteCommand
2、相对应的DataRow标记为已增加/修改/删除
------解决方案--------------------
SqlDataAdapter 可以自动创建这些代码。但是要调用SqlDataAdapter.update和SqlCommandBuilder。
还是不推荐这么做,如果数据库设计稍有改动,那这个方法就变摆设。
------解决方案--------------------你调用Remove后,该行与DataTable就没有任何关系了(DataRowState是Detached,且不可被遍历到),肯定更新不进去
把你的Remove改成 DataRow.Delete(这时DataRowState是Deleted,且可被DataTable.Rows遍历到),然后更新,行会被ado执行实际删除
------解决方案--------------------如:
DataRow[] 筛选已有数据 = 缓存数据表.Tables["啊啊啊"].Select("_ID ='" + 保存ID.ToString() + "'");
int 缓存表索引 = 缓存数据表.Tables["啊啊啊"].Rows.IndexOf(筛选已有数据[0]);
缓存数据表.Tables["啊啊啊"].Rows[缓存表索引].Delete();/*删除按条件选定的数据行*/
------解决方案--------------------
用处不同而已
如果只是把DataTable当数据载体用、不回写数据库,一般用Remove;增加Delete方法(只是我觉得,毕竟无法知道微软的人的真正想法)主要目的就是用于你这