System.Data.DBConcurrencyException: 违反并发性: UpdateCommand 影响了预期 1 条记录中的 0 条的解决方法

zsyutian 2009-12-10 11:46:24
因为做数据库系统要对一条记录进行 加/解锁

当查询出来的结果 解锁---修改保存[这时候就正常] --加锁 --(发现修改错了)解锁--修改保存[这时就出现提示]
System.Data.DBConcurrencyException: 违反并发性: UpdateCommand 影响了预期 1 条记录中的 0 条。
我只在加锁的时候用了 update table set confirmid ='用户' where id='该主键'

if (Conn.UpdateDataset(Conn.GetDb, Ds, tablename) >= 0)
{
Ds.AcceptChanges();


...全文
726 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zsyutian 2009-12-10
  • 打赏
  • 举报
回复
发现如果出现此提示,在SQlserver里面把confirmid还原成查询出来的值就可以保存,不可能每次都这样改呀!急啊,兄弟伙
zsyutian 2009-12-10
  • 打赏
  • 举报
回复
if (Conn.ExecuteQueryRow(Conn.GetDb, " update " + tablename + " set confirmid='" + Conn.loginname + "',confirmdate='" + Conn.ReturnDataTime(Conn.GetDb, false) + "' where " + columnname + "= '" + ID + "'") > 0)
{
pictureBox1.Visible = true;
delitem.Enabled = false;
saveitem.Enabled = false;
ConfirmBtn.Text = "解锁";
MessageBox.Show(lable + ID + "加锁成功", Language.ShowMessageHead(Cpublic.Version));
}
else
{

MessageBox.Show("加锁发生错误!", Language.ShowMessageHead(Cpublic.Version));
}
}
else
{
if (Conn.ExecuteQueryRow(Conn.GetDb, " update " + tablename + " set confirmid='' ,confirmdate='" + Conn.ReturnDataTime(Conn.GetDb, false) + "' where " + columnname + "='" + ID + "'") > 0)
{
pictureBox1.Visible = false;
SetButtonEnable();
ConfirmBtn.Text = "加锁";
MessageBox.Show(lable + ID + "解锁成功", Language.ShowMessageHead(Cpublic.Version));

}
else
{
MessageBox.Show("解锁发生错误!", Language.ShowMessageHead(Cpublic.Version));
}

这是查询出后,点击加解锁后通过sql语句更新,到解锁后修改数据后通过数据集更新,只更新了哪一个字段,我看网上说什么读到脏数据了,我不知道该怎样修改了


}
zsyutian 2009-12-10
  • 打赏
  • 举报
回复
有主键,就是更新了一个confirmid varchar(30)这个字段,如果没有更新这个字段,默认设置为''
wuyq11 2009-12-10
  • 打赏
  • 举报
回复

检查是否设有主键。
adapter实现数据更新
UpdateCommand的问题:检查更新的字段的原始值是否为空值(原始空值更新时可能会引发此异常)
int型设置为 0
adapter.FillSchema(ds, SchemaType.Mapped);
adapter.Update(ds);

110,539

社区成员

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

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

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