我现在有两个数据库,一个是放在中心服务器,一个放在客户端,中心服务器的数据库不暴露在网络里,只能通过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;
}
两个数据库的数据经常会不同,所以客户端每次连中心服务器前,都要做一次数据库同步,把指定时间以后的数据下载到本地.我现在的做法是 客户端一连线,就调用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;
}
实际上会先执行 mDSet.GetChanges() (返回被修改的Row数组)因为通过客户端提交上来的 DataSet 已经都是 Unchanged 了,所以你只能逐条手动根据服务端DB判断状态了。
那有没有简单办法呢?我目前从服务端获取的数据,肯定是客户端没有的,都是新的.
我用
DataRow NewRow = mDSet.Tables[0].NewRow() ;
NewRow = mRow;
mDSet.Tables[0].Rows.Add(NewRow);
也不行, 新增过来的还是 unchanged.这个状态又是只读的. 很纠结.fox123871 (婴儿肥) 这个数据库同步是客户端连上网,就要更新的.而且服务端不暴露在网络上,只能通过webservic 访问.
居然这里有个方法可以设定状态.
搞定了.