none
DataSet如何 协调 各个客户端对服务器数据源的操作? RRS feed

  • 问题

  • 比方说 A B两个客户同时 通过 dataAdpater 获取同一个
    物理数据库的同一张表(假设:此表中只有一条纪录)所有的记录 并向自己的DataSet
    返回了一张DataTable,之后他们对各自得到的DataTable 进行操作
    A客户对自己DataTable中的唯一一条记录作了 删除操作,然后Update回物理数据库,
    之后 B客户对自己 自己DataTable中的唯一一条记录作了 修改操作,然后Update,此时
    B客户端就报错异常了,请问这个问题怎么解决?哪位还知道啊?
    2009年9月7日 7:37

答案

  • 你好,请参考http://www.cnblogs.com/nehu/articles/135650.html中的管理锁定与并发。

    // 处理 RowUpdated 事件的方法。 如果登记该事件但不处理它,
    // 则引发一个 SQL 异常。
    protected static void OnRowUpdated(object sender, SqlRowUpdatedEventArgs
    args)
    {
      if (args.RecordsAffected == 0)
      {
        args.Row.RowError = "遇到开放式并发冲突";
        args.Status = UpdateStatus.SkipCurrentRow;
      }
    }
    jon.valett@gmail.com
    • 已标记为答案 杨汉亮 2009年9月8日 3:44
    2009年9月7日 8:12
    版主
  • 1 使用开放式并发: http://msdn.microsoft.com/zh-cn/library/aa0416cz(VS.80).aspx 如果你使用的是 TypeDataSet,只需要在 TableAdapter 的配置向导的高级选项中点选“使用开放式并发”
    2 使用事务控制



    知识改变命运,奋斗成就人生!
    • 已标记为答案 杨汉亮 2009年9月8日 3:44
    2009年9月7日 9:14
    版主

全部回复

  • 你好,请参考http://www.cnblogs.com/nehu/articles/135650.html中的管理锁定与并发。

    // 处理 RowUpdated 事件的方法。 如果登记该事件但不处理它,
    // 则引发一个 SQL 异常。
    protected static void OnRowUpdated(object sender, SqlRowUpdatedEventArgs
    args)
    {
      if (args.RecordsAffected == 0)
      {
        args.Row.RowError = "遇到开放式并发冲突";
        args.Status = UpdateStatus.SkipCurrentRow;
      }
    }
    jon.valett@gmail.com
    • 已标记为答案 杨汉亮 2009年9月8日 3:44
    2009年9月7日 8:12
    版主
  • 虽然 不太懂 但还是要谢谢你的回复。

    2009年9月7日 8:44
  • 虽然 不太懂 但还是要谢谢你的回复。


    不客气!
    jon.valett@gmail.com
    2009年9月7日 8:45
    版主
  • 我觉得用sql锁解决吧
    2009年9月7日 8:50
  • 1 使用开放式并发: http://msdn.microsoft.com/zh-cn/library/aa0416cz(VS.80).aspx 如果你使用的是 TypeDataSet,只需要在 TableAdapter 的配置向导的高级选项中点选“使用开放式并发”
    2 使用事务控制



    知识改变命运,奋斗成就人生!
    • 已标记为答案 杨汉亮 2009年9月8日 3:44
    2009年9月7日 9:14
    版主