C#。用DataAdapter和OleDbCommandBuilder更新数据库提示“重复的索引,主键,或关系值” 20

voidinsertFG(OleDbConnectionconn,DataTabledto,DataTabledtp){conn.Open();OleDbTransact... void insertFG(OleDbConnection conn, DataTable dto, DataTable dtp)
{
conn.Open();
OleDbTransaction transaction = conn.BeginTransaction();
OleDbCommand cmd = conn.CreateCommand();
cmd.Transaction = transaction;
cmd.Connection = conn;
OleDbDataAdapter oda = new OleDbDataAdapter();
try
{
cmd.CommandText = "select * from hsc_vchr";
oda.SelectCommand = cmd;
OleDbCommandBuilder ocb = new OleDbCommandBuilder(oda);
oda.Fill(dto);
oda.Update(dto);

cmd.CommandText = "select * from hsc_part";
oda.SelectCommand = cmd;
ocb = new OleDbCommandBuilder(oda);
oda.Fill(dtp);
oda.Update(dtp);

transaction.Commit();
MessageBox.Show("保存成功", "-_-");
}
catch (Exception ex)
{
transaction.Rollback();
MessageBox.Show(ex.Message.ToString());
}
conn.Close();
}
执行到oda.Update(dto);报错
我是把整张表调出来,修改后在保存回去,肯定会有重复的值啊。

它把我改完的行,当作新加的行,追加进去
展开
 我来答
百度网友8371ee6
2010-06-23 · TA获得超过2818个赞
知道小有建树答主
回答量:692
采纳率:0%
帮助的人:677万
展开全部
oda.Update(dto);
或者
oda.Update(dtp);
时,DataTable 里已经有相同的记录了,而且由于该DataTable 设置了“索引,主键,或关系值”,使得记录不能重复。最好在这里加上try catch,跟踪调试一下oda与dto和dtp的值,是不是有重复的记录。
另外,建议楼主即那个2条数据库更新语句分开写成2个函数。不要用同一套变量,这样很容易出错。
liuyun969
2010-06-23
知道答主
回答量:47
采纳率:0%
帮助的人:42万
展开全部
cmd.CommandText = "select * from hsc_vchr";
oda.SelectCommand = cmd;
OleDbCommandBuilder ocb = new OleDbCommandBuilder(oda);
oda.Fill(dto);
oda.Update(dto);

cmd.CommandText = "select * from hsc_part";
oda.SelectCommand = cmd;
ocb = new OleDbCommandBuilder(oda);
oda.Fill(dtp);
oda.Update(dtp);
这两个重复了。应属于不同的cmd
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式