如何删除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就没有任何关系了—ataRowState是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方法(只是我觉得,毕竟无法知道微软的人的真正想法)主要目的就是用于你这样的回写数据库需求的
[解决办法]
DataTable中行的Remove 和 Delete方法区别是
Remove 是从DataTable 行集中移除
Delete 是标记DataTable 行的DataRowState 状态为Deleted的并非移除.
调用DataTable 的 AccepteChanges时才进行Remove掉(移除掉).
Update 是根据DataTable行的DataRowState状态,更新回数据库
Added 对应插入
Modified对应修改
Deleted对应删除