关于dataset难题 两个dataset,里面的表的个数和表的结合都一样,但是数据用可能不同,需要作的是表一个dataset合并到另一dataset里,以一个dataset为准,把另一dataset里的数据进行合并,记录相同不变,不同进行更新,多出来的进行增加,少的进行删除 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 没必要在这里合找到SQL语句然后从新查询 比这简单多了 在dataset里,好象不可以类似解决的 Merage 合并! 细节方法自己想, 用datatable实现啊。 DataTable da = new DataTable(); da.TableName = "DM_INFO"; DataColumn dc; DataRow dr; for (int i = 0; i < 你dataset中的列的数目; i++) { dc = new DataColumn(); dc.DataType = System.Type.GetType("System.String"); dc.ColumnName = "a" + i.ToString(); da.Columns.Add(dc); }然后再:以一个dataset为基准,把这个dataset中的数据全部给datatable,如下: for (int i= 0; i < ds.Tables[tablename].Rows.Count; i++) for (int j = 0; j < ds.Tables[tablename].Columns.Count; j++){ dr = da.NewRow(); dr["aj"] = ds.Tables[datatablename].Rows[i][j].ToString(); da.Rows.Add(dr);}再用另一个dataset里面的内容与datatable里面的内容进行比较去掉相同数据。///////////////////////////////////////////////////////////////这里的算法自己搞搞。/////////////////////////////////////////////////////////最后:DataView dv = new DataView(da); 用DataSet中对应的Table的行的RowState属性.此属性有五种状态DataRowState.Added,Deleted,Detached,Modified,Unchanged 使用DataSet.Merge()方法来实现。 dataset.merge() 后的dataset能更新数据库吗,我怎么用sqldataadapter.update()不成功,merge后就不能检测到是那一个行变化了 merge() 应该有主键的限制没把,我merge()后发现相同主键的数据被保留 merge() 方法有三个参数,将第二个参数设置为False,相同主键但被更新的数据,也会Merge进去的 dsget.Merge(ds);if (dsget.HasChanges(DataRowState.Modified | DataRowState.Deleted|DataRowState.Added)) { MessageBox.Show(""); } DataSet dsGetchange = dsget.GetChanges(); if (dsGetchange!=null) { da.Update(dsGetchange);//更新数据库 }merge()完后好像 dataset.haschanges为空,if条件不起作用,而且dschange也为空,这样的话是不是要想更行数据库,就得用两个dataset得datarow来操作 用 DATATABLE 做 可以实现 要用到DataTable.Select()判断是否存在 不存在就加入 用这个方法你自己试试 dsCust1.Merge(dsCust2);SqlCommandBuilder objBuilder = new SqlCommandBuilder(adpt);adpt.UpdateCommand = objBuilder.GetUpdateCommand();adpt.InsertCommand = objBuilder.GetInsertCommand();adpt.DeleteCommand = objBuilder.GetDeleteCommand();DataTable updTable = dsCust1.Tables[0];adpt.Update(updTable.Select(null, null, DataViewRowState.Added));可以成功!但是我把它作出个webservice就不行,我传给webservice一个dataset,然后webservice把这个dataset和从数据库里查出的dataset进行merge。但是怎么不成功 (接上)merge后进行数据库更新,怎么看不到更新啊 dataset 本身就有该功能。用Merge() 方法 DataSet ds = new DataSet(); for(int i=0;i<ds.Tables[0].Rows.Count;i++) { DataRow dr = ds.Tables[1].NewRow(); for(int j=0;j<ds.Tables[0].Columns.Count;j++) { dr[i] = ds.Tables[0].Rows[i]; } try { ds.Tables[1].Rows.Add(dr); } catch(Exception ex) { string Err = ex; } } DataSet ds = new DataSet(); for(int i=0;i<ds.Tables[0].Rows.Count;i++) { DataRow dr = ds.Tables[1].NewRow(); for(int j=0;j<ds.Tables[0].Columns.Count;j++) { dr[j] = ds.Tables[0].Rows[i][j]; } try { ds.Tables[1].Rows.Add(dr); } catch(Exception ex) { string Err = ex; } }刚发错了 我明白你的意思,是操作dataset里的datatable,我用dsCust1.Merge(dsCust2);SqlCommandBuilder objBuilder = new SqlCommandBuilder(adpt);adpt.UpdateCommand = objBuilder.GetUpdateCommand();adpt.InsertCommand = objBuilder.GetInsertCommand();adpt.DeleteCommand = objBuilder.GetDeleteCommand();DataTable updTable = dsCust1.Tables[0];adpt.Update(updTable.Select(null, null, DataViewRowState.Added));这个方法来更新数据库,行吗? 看看 DataSet.MergeFailed 事件发生没有 用sqldataadapter进行更新,必须datatable里datarow的datarowstate不是unchange的,所以必须把新merge来的数据的datarowstate属性进行更改,但是这个属性就只读的,这样就比较麻烦,我用一个临时dataset进行,把要加入的的dataset里的数据加到临时dataset里,这时临时的dataset的datarowstate就是added,然后在进行更改和删除操作,datarowstate就是deleted和update的,这样虽然可行,但是比较麻烦 max函数和空表 控制系统只能识别特定的u盘问题 用C#如何生成条形码? 重分请大家通俗地谈谈GAC到底是个什么东西。 关于DataRelation的简单问题 C#监测音频设备热插拔功能 关于C#调用Java包(jar)的方法 关于C#编写com的问题 武汉做c#和asp.net的看看这里 简单问题2 一个关于WINFORM控件在客户端显示的问题(很复杂!!!) 同步与异步发送\接收的问题!
DataTable da = new DataTable();
da.TableName = "DM_INFO";
DataColumn dc;
DataRow dr; for (int i = 0; i < 你dataset中的列的数目; i++)
{
dc = new DataColumn();
dc.DataType = System.Type.GetType("System.String");
dc.ColumnName = "a" + i.ToString();
da.Columns.Add(dc);
}
然后再:以一个dataset为基准,把这个dataset中的数据全部给datatable,如下:
for (int i= 0; i < ds.Tables[tablename].Rows.Count; i++)
for (int j = 0; j < ds.Tables[tablename].Columns.Count; j++)
{
dr = da.NewRow();
dr["aj"] = ds.Tables[datatablename].Rows[i][j].ToString();
da.Rows.Add(dr);
}
再用另一个dataset里面的内容与datatable里面的内容进行比较去掉相同数据。
/////////////////////////////////////////////////////////
//////这里的算法自己搞搞。
/////////////////////////////////////////////////////////
最后:
DataView dv = new DataView(da);
Detached,Modified,Unchanged
if (dsget.HasChanges(DataRowState.Modified | DataRowState.Deleted|DataRowState.Added))
{
MessageBox.Show("");
}
DataSet dsGetchange = dsget.GetChanges();
if (dsGetchange!=null)
{ da.Update(dsGetchange);//更新数据库
}merge()完后好像 dataset.haschanges为空,if条件不起作用,而且dschange也为空,
这样的话是不是要想更行数据库,就得用两个dataset得datarow来操作
dsCust1.Merge(dsCust2);
SqlCommandBuilder objBuilder = new SqlCommandBuilder(adpt);adpt.UpdateCommand = objBuilder.GetUpdateCommand();
adpt.InsertCommand = objBuilder.GetInsertCommand();
adpt.DeleteCommand = objBuilder.GetDeleteCommand();DataTable updTable = dsCust1.Tables[0];
adpt.Update(updTable.Select(null, null, DataViewRowState.Added));可以成功!但是我把它作出个webservice就不行,我传给webservice一个dataset,然后webservice把这个dataset和从数据库里查出的dataset进行merge。但是怎么不成功
用Merge() 方法
for(int i=0;i<ds.Tables[0].Rows.Count;i++)
{
DataRow dr = ds.Tables[1].NewRow(); for(int j=0;j<ds.Tables[0].Columns.Count;j++)
{
dr[i] = ds.Tables[0].Rows[i];
} try
{
ds.Tables[1].Rows.Add(dr);
}
catch(Exception ex)
{
string Err = ex;
}
}
for(int i=0;i<ds.Tables[0].Rows.Count;i++)
{
DataRow dr = ds.Tables[1].NewRow(); for(int j=0;j<ds.Tables[0].Columns.Count;j++)
{
dr[j] = ds.Tables[0].Rows[i][j];
} try
{
ds.Tables[1].Rows.Add(dr);
}
catch(Exception ex)
{
string Err = ex;
}
}
刚发错了
SqlCommandBuilder objBuilder = new SqlCommandBuilder(adpt);adpt.UpdateCommand = objBuilder.GetUpdateCommand();
adpt.InsertCommand = objBuilder.GetInsertCommand();
adpt.DeleteCommand = objBuilder.GetDeleteCommand();DataTable updTable = dsCust1.Tables[0];
adpt.Update(updTable.Select(null, null, DataViewRowState.Added));这个方法来更新数据库,行吗?