日期:2014-05-18  浏览次数:20821 次

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更新到数据库的时候,数据库中的表,一定要一个主键。。