问题是这样的:OracleDataAdapter.Update(DataTable表);的时候遇到“违反唯一约束条件”这样的情况。现在先说说具体情况:我项目需要从一个数据库里面取出一张表,修改一些数据后,更新到远方一个相同表结构的数据库里面。现在我已经取出这样表,并且修改好了,分别增加了一些新行,和修改原来一些数据。然后把结构存放在一个XML中。
接着我来到远处服务器,重新构造回这个DataTable,现在我需要OracleDataAdapter.Update(DataTable表);这个表的时候,如果和需要更新的服务器数据有 相同的主键,那么就覆盖这条记录,而不是添加这记录(问题也就出在这里,因为一添加就有两个主键了)
我应该怎么做呢?代码如下:
OracleDataAdapter ada = new OracleDataAdapter("select * from gg_gg", conn);
OracleCommandBuilder cb = new OracleCommandBuilder(ada);
ada.Update(datatable);//这里的datatable 就是有着和gg_gg完全相同结构的一张表,是我从XML中重新构造出来的。
现在问题是:新的行会直接添加,但有相同主键的行就出错了,我想有相同主键的行就覆盖,我该怎么做?不管能不能解决,先谢谢大家!!
接着我来到远处服务器,重新构造回这个DataTable,现在我需要OracleDataAdapter.Update(DataTable表);这个表的时候,如果和需要更新的服务器数据有 相同的主键,那么就覆盖这条记录,而不是添加这记录(问题也就出在这里,因为一添加就有两个主键了)
我应该怎么做呢?代码如下:
OracleDataAdapter ada = new OracleDataAdapter("select * from gg_gg", conn);
OracleCommandBuilder cb = new OracleCommandBuilder(ada);
ada.Update(datatable);//这里的datatable 就是有着和gg_gg完全相同结构的一张表,是我从XML中重新构造出来的。
现在问题是:新的行会直接添加,但有相同主键的行就出错了,我想有相同主键的行就覆盖,我该怎么做?不管能不能解决,先谢谢大家!!
你这里的情况就是 可以加个 首先取得dataset 然后从xml里面取出数据 遍历下dataset 如果主键与xml里面的数据一致的话 就对datable里面的数据进行更新 不是的话则插入(这段逻辑 你自己用程序去写) 然后得到最新的datatable 然后在ada.update(datatable).
参考:
DataRowState Enumeration
http://msdn.microsoft.com/zh-cn/library/system.data.datarowstate.aspx你从xml构造的,应该状态都是Added而不是Modified。建议使用DataSet的WriteXml来写xml,并使用ReadXml来读取。
public void WriteXml (
string fileName,
XmlWriteMode mode
)
mode传入DiffGramDiffGram的意思参考:
http://msdn.microsoft.com/en-us/library/ms172088(v=vs.80).aspx以上只是根据msdn推断,没有经过测试
循环用SqlCommand去执行 Update sql语句了。