请教各位数据库表里数据如何合并

listworld 2011-12-26 09:12:44
我现在有两个数据库,一个是放在中心服务器,一个放在客户端,中心服务器的数据库不暴露在网络里,只能通过webservice访问.
两个数据库的数据经常会不同,所以客户端每次连中心服务器前,都要做一次数据库同步,把指定时间以后的数据下载到本地.

我现在的做法是 客户端一连线,就调用webservice方法, 把中心服务器最新的数据生成一个 dataset 返回,然后 客户端再用一个dataset与之合并, 然后再调用 dataste 的update 方法,更新进本地数据库.我觉得这个效率会比较高一点

但是发现两个dataset 合并后,用update 无法更新进数据库
我跟踪发现合并过来的 row , rowstatue 是 unchanged ,是不是因为这个原因无法更新数据库?

代码如下:
string myTempSql = "select * from tabdict where id = 'TEST001'";
string mySql = "select * from tabdict where id = '-1' ";
DataSet mTempSet = SelectDb(myTempSql, "tabdict", _TempConnString);
DataSet mDSet = SelectDb(mySql, "tabdict", _connString);

mDSet.Merge(mTempSet);

this.da = new SqlDataAdapter(this._strSql, this.GetConn(sConString));

this.sqlCmdBuilder = new SqlCommandBuilder(da);

this.da.Update(mDSet, "tabdict");
mDSet.AcceptChanges();

public DataSet SelectDb(string strSql, string strTableName,string sConString)
{
this.da = new SqlDataAdapter(strSql, this.GetConn(sConString));

DataSet ds = new DataSet();

da.FillSchema(ds, SchemaType.Source, "tabdict");
this.da.Fill(ds, strTableName);

return ds;


}
...全文
49 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
listworld 2011-12-26
  • 打赏
  • 举报
回复
谢谢 fangxinggood (JustACoder)兄
居然这里有个方法可以设定状态.
搞定了.
listworld 2011-12-26
  • 打赏
  • 举报
回复
好,我试试
机器人 2011-12-26
  • 打赏
  • 举报
回复
遍历 DataRow, 调用 DataRow.SetAdded()

mDSe.Tables[0].AsEnumerable().ForEach(r => r.SetAdded());
listworld 2011-12-26
  • 打赏
  • 举报
回复
fangxinggood (JustACoder)兄
那有没有简单办法呢?

我目前从服务端获取的数据,肯定是客户端没有的,都是新的.
我用
DataRow NewRow = mDSet.Tables[0].NewRow() ;
NewRow = mRow;
mDSet.Tables[0].Rows.Add(NewRow);
也不行, 新增过来的还是 unchanged.

这个状态又是只读的. 很纠结.

fox123871 (婴儿肥) 这个数据库同步是客户端连上网,就要更新的.而且服务端不暴露在网络上,只能通过webservic 访问.

机器人 2011-12-26
  • 打赏
  • 举报
回复
我跟踪发现合并过来的 row , rowstatue 是 unchanged ,是不是因为这个原因无法更新数据库?

--------------

是这个原因,Adapter.Fill 根据不同的 rowstatue 来调用实际的 XXXCommand 。
实际上会先执行 mDSet.GetChanges() (返回被修改的Row数组)

因为通过客户端提交上来的 DataSet 已经都是 Unchanged 了,所以你只能逐条手动根据服务端DB判断状态了。
fox123871 2011-12-26
  • 打赏
  • 举报
回复
弄个SQL作业吧,晚上同步,你这样数据量大了 没办法了啊 ~~

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧