0

考虑到我拥有提供网页内容的数据库,同时允许少数用户编辑所述页面,我刚刚了解到两件重要的事情。

  1. 需要数据库事务。
  2. 数据库事务可能非常复杂(从我的 C#.NET Web-Pages w/WebMatrix 环境的角度来看)。

因此,我在 Wikipedia'd、Google'd 甚至 SO'd 上对如何着手理解如何简单地开始这一点抱有一线希望,以便我的数据库可能是一致的。

在阅读了这个主题(包括这个页面:http ://technet.microsoft.com/en-us/library/ms172400.aspx )之后,我开始意识到,虽然我在交易方面学到了更多东西,但我觉得对于我自己的 SQL Server CE 数据库,更接近于自己实际实现它们。

我意识到(至少在某种程度上)我所问的问题的重要性,但希望了解我的环境的人(C#.NET Web-Pages w/WebMatrix,使用 SQL Server CE)也许可以提供一个如何实现的示例.

我不需要一大堆花哨的东西或任何东西,我只想确保在提交保存的更改时没有人访问数据库(嗯,我想我的意思是我希望用户收到预期的内容,如果两个用户同时保存,则不会使数据库崩溃等)。

假设我有一个包含两列 [objectID, value] 的表 [testTable]。

我有一个简单的选择语句 [say: "SELECT * FROM testTable"] 然后我用它填充一个页面,每当有人访问它时。

现在,假设我有另一个页面,少数用户可以使用该页面修改可查看页面,然后当他们单击“保存”时,它会使用 ["UPDATE testTable SET objectID = @0, value = @1" 之类的内容保存旧值]

考虑到我不知道如何开始 ADO.NET 方法或直接 SQL 方法的语法,考虑到我的环境和语法是什么,这是最容易的?

4

1 回答 1

1

您的问题不是交易解决的问题。事务充当许多操作的包装器,当您尝试提交它们时,这些操作要么全部成功,要么全部失败。您要解决的问题是并发问题之一。你只需要决定一个并发策略。对于大多数 CRUD 系统来说,“最后获胜”通常已经足够好了——通常只有一个版本的事实,但您的情况可能需要不同的方法。

其他策略是乐观并发和悲观并发:

从这个页面(http://msdn.microsoft.com/en-us/library/cs6hb8k4(v=vs.80).aspx

并发控制的类型

一般来说,在数据库中管理并发有三种常用方法:

  • 悲观并发控制:从获取记录到在数据库中更新,用户无法使用一行。
  • 乐观并发控制:只有在实际更新数据时,其他用户才能使用该行。更新检查
    数据库中的行并确定是否进行了任何更改
    。尝试更新已更改的记录会
    导致并发冲突。
  • “最后胜出”:只有在实际更新数据时,其他用户才能使用该行。但是,不会将更新与原始记录进行比较;该记录被简单地写出,可能会覆盖自
    您上次刷新记录以来其他用户所做的任何更改。
于 2013-10-29T08:35:19.757 回答