问大家一个非常专业的问题,在线等!!!!急急急!!!!

zhuzhusex1016 2012-03-27 02:12:40
以下是我的更新本地dataSet事件
private void buttonUp_Click(object sender, EventArgs e)
{
SqlCommandBuilder sb = new SqlCommandBuilder(da);
DataTable dt = this.dataGridView1.DataSource as DataTable;
if (da != null)
{
da.RowUpdated += new SqlRowUpdatedEventHandler(RowUpdate);
da.Update(dt);
}
}

private void RowUpdate(object sender, SqlRowUpdatedEventArgs e)
{
//如果数据库中的原始数据已经被其他操作更改, 更新或删除, 我怎么获取这种出错的行?
}
...全文
333 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
hwbox 2012-03-27
  • 打赏
  • 举报
回复
你的这个需求有点怪。
我理解的是这样的,你库里有个表,有一行数据。
你的页面a.aspx显示了这个数据,a.aspx可能修改这个数据。
二种情况:
第一种:
当A,B两个用户都是通过网站修改这个数据的,比如B修改了,A用户正在看a.aspx的时候就要自动刷新。
解决方法。
任何一个用户在做数据update的时候都,写入一个全局的表中。所有用户ajax访问页面get.ashx来获取数据是否被更新了,然后ajax更新当前页面。
第二种:
当A用户都通过网站浏览数据的,B通过其它方式比如直接写库改数据时。
二种方案:
1、人不多时:加个字段,写的时候都写入系统时间,当时间变化时更改。如果是对全表中任一数据都敏感。就做个触发器,修改另一个表字段中的时间字段,Ajax轮询这个时间,不一样就ajax刷新。
2、人多,数据库不能轮询:触发器调dbms_pipe 发管道消息。网站这边ajax到处理页从管道里得消息,决定是否刷新(此方法具体实现本人不了解)
macooidle 2012-03-27
  • 打赏
  • 举报
回复
每次都从数据库取一次数据,和你的dt比较。。。
边城的刀声 2012-03-27
  • 打赏
  • 举报
回复
用linq to sql ,如果你提交的数据,和数据库中的数据库不一致,会抛出一个冲突的异常
缪军 2012-03-27
  • 打赏
  • 举报
回复
悲观加锁的时候,不需要任何额外的处理,
提交更新的时候就会引发异常,捕获并提示,有必要的话,再刷新那一行
缪军 2012-03-27
  • 打赏
  • 举报
回复
十几年前的时候ado就已经能够支持并发处理了,
楼主这个情况应该采用悲观加锁(现在叫做悲观并发)
具体参考MSDN:
http://social.msdn.microsoft.com/Forums/zh-CN/adonetzhchs/thread/e86a7bed-4ff1-4e98-9685-4b66645f07fb/

jws873176893 2012-03-27
  • 打赏
  • 举报
回复
数据库里面有 updated和deleted表 表示已经更新和删除了的历史记录表 利用这2个表 试下
兔子丶哥 2012-03-27
  • 打赏
  • 举报
回复
数据库中加个字段 ts timestamp 类型 非空。
界面别显示这个字段 但是要存储。更新数据的时候 可以用这个字段和数据库的对比。相同的话,数据库的数据就是没变化过的。反之,就是被别人操作过的。
肖无疾 2012-03-27
  • 打赏
  • 举报
回复
好像可以启用并发冲突
肖无疾 2012-03-27
  • 打赏
  • 举报
回复
好像可以启用并发冲突
zhuzhusex1016 2012-03-27
  • 打赏
  • 举报
回复
错错错!!!!!!!!!!!!!11
lele1028265767 2012-03-27
  • 打赏
  • 举报
回复
使用触发器!一旦更新了就执行预先设定的语句
zhuzhusex1016 2012-03-27
  • 打赏
  • 举报
回复
还有人知道吗?????? 我怎么才能知道数据库中原有的行已经被更新!!!!!!!!!!
  • 打赏
  • 举报
回复
你说不对,那就说明你知道什么答案对咯??????????????[Quote=引用 5 楼 zhuzhusex1016 的回复:]

楼上说的不对,,还有人知道吗??????????????
[/Quote]
zhuzhusex1016 2012-03-27
  • 打赏
  • 举报
回复
我当然并不知道数据库已经更新了,,,
allen0118 2012-03-27
  • 打赏
  • 举报
回复
你是如何知道数据库里面的数据已经被更新了?既然你已经知道了那么比较一下应该可以得到。
zhuzhusex1016 2012-03-27
  • 打赏
  • 举报
回复
楼上说的不对,,还有人知道吗??????????????
zhuzhusex1016 2012-03-27
  • 打赏
  • 举报
回复
楼上说的不对!!!! 还有人知道吗???????????
  • 打赏
  • 举报
回复
我感觉你的updatecommand 自己写语句 然后加标志 记录更新失败的行的行号并返回到一个List中?
EnForGrass 2012-03-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zhuzhusex1016 的回复:]

有人知道吗???怎么获取数据库中已经改变,或删除的行????????
[/Quote]
C#的DataTable的行有几种状态:

Added:表示行已添加到DataRowCollection,尚未调用DataTable.AcceptChange()
Modified:表示行已被修改,尚未调用DataTable.AcceptChange()
Deleted:表示行已被删除,
Unchanged:自上次调用AcceptChange()之后没有更改的行.
Detached:行虽然创建,但没有放到DataRowCollection中.

MSDNhttp://msdn.microsoft.com/zh-cn/library/system.data.datarowstate.aspx
zhuzhusex1016 2012-03-27
  • 打赏
  • 举报
回复
有人知道吗???怎么获取数据库中已经改变,或删除的行????????

110,499

社区成员

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

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

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