我的DataSet中的数据是用户登录时才填充该用户的数据,而有个列需要定时从数据源更新到DataSet.Tables("users")中的现有行
我尝试的做法是:
    string userlist = ""; 
    foreach (var pRow in DataSet.Tables("users").Rows) { 
        userlist += pRow("Sid").ToString + ","; 
    } 
    userlist = userlist.Remove(userlist.Length - 1, 1); 
    
    string Sql = "select Sid,F_DB from [users] where Sid in (" + userlist + ")"; 
    
    Adapter = new SqlDataAdapter(Sql, Conn); 
    Adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey; 
    
    int ds = Adapter.Fill(DataSet, "users"); 
这样做时,DataSet.Tables("users")中的现有行除了Sid,F_DB外的其他列会被清空...麻烦大家指点一下该怎么做才能只填充F_DB列?还有where in语句支持多大的集合?当userlist内包含上千个ID时,where in是否支持? 

解决方案 »

  1.   


    我的当前进程有专门的线程将DataSet.Tables("users")除F_DB列外的其他列写入数据源,而F_DB会被外部进程修改数据,所以我需要定时填充F_DB列到当前进程的DataSet.Tables("users")来通知用户F_DB列的值因为DataSet.Tables("users")中其他列的数据每微妙都有可能被其他线程修改,如果从数据源提取出所有列,会导致数据丢失我想过将F_DB列填充到一个临时DataSet表,然后将F_DB列复制到DataSet.Tables("users"),但因为数据量很大,这样会影响性能SqlDataAdapter.Fill有没有办法只填充指定的列?
      

  2.   

    你的Sql语句只返回指定的列,然后再填充 不行么?
      

  3.   


    大哥没看我代码啊....我就是这样做的,但这样做会使DataSet.Tables("users")中Sid,F_DB外的其他列会被清空
      

  4.   

    只填充某列可以,问题是会清空其他的列。不过你可以试着这样:填充这个列到一个临时表中,删除原表中对应列,然后使用DataTable.Merge合并两个表。顺便问一句,其他的线程应该不会更新主键列吧,如果更新的话,到时这个列更新回去的话怎么参照呢?
      

  5.   


    问题解决,感谢!
    DataTable.Merge的效率比自己写代码合并2个表高N个档次,没有详细研究DataSet,以前都不知道有DataTable.Merge这个方法...再次感谢!