这个dataset的维护是一边插一边删除的,删除是用rows.remove方法,当写入数据的时候我是先判断dataset.table.rows.count是不是为0,如果是为0就不写数据进去.但是实际发现当为0时,写数据进去会报键列重复,只好通过判断rows.count=0时ds.table.clear方法清空后再写入解决问题.
这是怎么回事呢?

解决方案 »

  1.   

    没太明白
    你的意思是向DataSet中插DataTable吗?
      

  2.   

    是向dataset.datatable插入行,删除行
      

  3.   

    搂主
    dataset的删除,其实并不是真的删除
    他还存在的,只是NET内置有一个标识,标识他是删除的行.另外,每一行都有他的version的...
      

  4.   

    不是说rows.delete是标志删除,rows.remove是直接从表里删除吗即rows.delete+tables.acceptchanges=rows.remove吗?
      

  5.   

    这是建立数据行的过程if(ds.Tables["_tbmo"].Rows.Count==0)
    {
            //要不是靠这个clear,偶尔会报大概是主键重复的错误,因为在初始化ds的时候我定义了一个primary列的
    //ds.Tables["_tbmo"].Rows.Clear();
    using (SqlConnection db = new SqlConnection(_sqlConnString))
    {
    try
    {
    SqlDataAdapter _damo =new SqlDataAdapter("select top 100 * from cp_sp_syn_mo with(nolock) order by Id", db);
                            _damo.Fill(ds, "_tbmo");................
    这是删除数据行的过程DataRow dr_mo=ds.Tables["_tbmo"].Rows[0];
    DataRow dr=ds.Tables["_tbmo"].Rows.Find(sId);
    if(dr!=null)
    {
    if(dr.RowState!=DataRowState.Deleted)
    {
    ds.Tables["_tbmo"].Rows.Remove(dr);
    }
    }
    .............
      

  6.   

    补充:cp_sp_syn_mo表的id列是自增列,肯定不会有重复
      

  7.   

    if(ds.Tables["_tbmo"].Rows.Count==0) 

            //要不是靠这个clear,偶尔会报大概是主键重复的错误,因为在初始化ds的时候我定义了一个primary列的 
    //ds.Tables["_tbmo"].Rows.Clear(); 
    using (SqlConnection db = new SqlConnection(_sqlConnString)) 

    try 

    SqlDataAdapter _damo =new SqlDataAdapter("select top 100 * from cp_sp_syn_mo with(nolock) order by Id", db); 
                            _damo.Fill(ds, "_tbmo"); 
    这是删除数据行的过程 DataRow dr_mo=ds.Tables["_tbmo"].Rows[0]; 
    DataRow dr=ds.Tables["_tbmo"].Rows.Find(sId); 
    if(dr!=null) 

    if(dr.RowState!=DataRowState.Deleted) 

    ds.Tables["_tbmo"].Rows.Remove(dr); 


      

  8.   


    好象Remove是直接从集合中删除,不标记删除的,所以也不要用AcceptChanges方法吧
      

  9.   

    楼主的删除和插入操作是不是在不同的线程中进行处理,如果是这样,那需要对DataSet进行lock,保证原子化操作。
      

  10.   

    这是因为一个DataSet对象可以包含多个DataTable对象,而一个DataTable对象里面才有多个DataRow对象