Dataset 删除行的问题
DataSet.Tables[0].Rows[nSelectIndex].Delete();
SqlCommandBuilder sqlcommandbuile = new SqlCommandBuilder(m_DataAdapter);
DataAdapter.Update(DataSet, "tab1 ");
MessageBox.Show( "成功 ", "成功 ");
........刷新显示
表有主键
执行结果是 MessageBox 弹出成功,点确定之后刷新显示那行仍然存在
大家能否详细说说如何解决,谢谢了
------解决方案--------------------DataAdapter.Fill方法不会把数据库表中的关系映射到DataSet中到。
只是把数据库中表的数据填充到DataSet中。
虽然数据库设置了主键。但本地DataSet中的表却没有主键。只有数据。
如果想把数据关系架构添加到DataSet中,可以用:FillSchema方法。
ds.Tables[ "tab1 "].Rows.Find() 中的 "Find "方法需要根据主键或是唯一键进行查找。所以就会出现:没有主键的异常
这时就需再手动设置一下主键:
假设第一列为主键
ds.Tables[ "tab1 "].PrimaryKey = new DataColumn[] { ds.Tables[ "tab1 "].Columns[0]};
这时Find()方法将不会抛出异常。。
还有用DataAdapter更新到数据库的时候,数据库中的表,一定要一个主键。。