以下是我的更新本地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)
{
//如果数据库中的原始数据已经被其他操作更改, 更新或删除, 我怎么获取这种出错的行?
}
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)
{
//如果数据库中的原始数据已经被其他操作更改, 更新或删除, 我怎么获取这种出错的行?
}
解决方案 »
- (C# Winform)如何在WebBrowser控件的页面中通过点击页面iframe元素动态获取里面的html代码
- 数据库数据全体自加一的问题
- linq to sql 在线等
- 安装discuz2.6 sql版时,对 config 目录没有写入和删除权限!
- 百度和GOOGLE了几个小时没解决--怎么断开当前某个连接(HTTP连接)
- 如何用编程方法断开与数据库的连接
- 对象的属性问题
- datagrid中的将一个格子修改,此时不去点击其他的列或行而直接去点击保存按钮,刚修改的那个格子中的值实际上没有保存到dataset和数据库
- 我的winform类(.cs)文件太大了,怎么办
- 采用wDoc.Paragraphs[i].Range.Text.Trim()语句读出来的字符串为何无法进行分割呢?
- 诚心求教关于抓取网页文字内容及图片的问题
- 动态添加Label图片
Modified:表示行已被修改,尚未调用DataTable.AcceptChange()
Deleted:表示行已被删除,
Unchanged:自上次调用AcceptChange()之后没有更改的行.
Detached:行虽然创建,但没有放到DataRowCollection中.MSDNhttp://msdn.microsoft.com/zh-cn/library/system.data.datarowstate.aspx
界面别显示这个字段 但是要存储。更新数据的时候 可以用这个字段和数据库的对比。相同的话,数据库的数据就是没变化过的。反之,就是被别人操作过的。
楼主这个情况应该采用悲观加锁(现在叫做悲观并发)
具体参考MSDN:
http://social.msdn.microsoft.com/Forums/zh-CN/adonetzhchs/thread/e86a7bed-4ff1-4e98-9685-4b66645f07fb/
我理解的是这样的,你库里有个表,有一行数据。
你的页面a.aspx显示了这个数据,a.aspx可能修改这个数据。
二种情况:
第一种:
当A,B两个用户都是通过网站修改这个数据的,比如B修改了,A用户正在看a.aspx的时候就要自动刷新。
解决方法。
任何一个用户在做数据update的时候都,写入一个全局的表中。所有用户ajax访问页面get.ashx来获取数据是否被更新了,然后ajax更新当前页面。
第二种:
当A用户都通过网站浏览数据的,B通过其它方式比如直接写库改数据时。
二种方案:
1、人不多时:加个字段,写的时候都写入系统时间,当时间变化时更改。如果是对全表中任一数据都敏感。就做个触发器,修改另一个表字段中的时间字段,Ajax轮询这个时间,不一样就ajax刷新。
2、人多,数据库不能轮询:触发器调dbms_pipe 发管道消息。网站这边ajax到处理页从管道里得消息,决定是否刷新(此方法具体实现本人不了解)