如何在带有WebMatrix环境的C#.Net网页中实现SQL Server CE的数据库事务

本文关键字:实现 SQL Server 事务 数据库 CE 网页 WebMatrix 环境 Net | 更新日期: 2023-09-27 18:37:23

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

  1. 数据库事务是必需的。
  2. 数据库事务可能非常复杂(从我的 C#.NET 网页和 WebMatrix 环境的角度来看)。

所以,我在维基百科上,谷歌上,甚至对如何理解如何简单地开始这个有一点希望,这样我的数据库就可以保持一致。

在阅读了这个主题(包括本页:http://technet.microsoft.com/en-us/library/ms172400.aspx)之后,我开始意识到,虽然我正在学习更多关于事务的知识,但我觉得自己并没有为我自己的SQL Server CE数据库实际实现它们。

我意识到(至少在某种程度上)我所问的问题的重要性,但希望了解我的环境(C#.NET Web-Pages与WebMatrix,使用SQL Server CE)的人也许可以提供一个例子来说明如何做到这一点。

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

假设我有一个表[testTable],其中包含两列[objectID,值]。

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

现在,假设我有另一个页面,少数用户可以修改可查看页面,然后当他们单击"保存"时,它会保存旧值,如下所示 ["UPDATE testTable SET objectID = @0, value = @1"]

考虑到我不知道如何开始 ADO.NET 方法和直接SQL方法的语法,考虑到我的环境和语法,这是最简单的

如何在带有WebMatrix环境的C#.Net网页中实现SQL Server CE的数据库事务

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

其他策略包括乐观并发和悲观并发:

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

并发控制的类型

通常,有三种常用方法可以在 数据库:

  • 悲观并发控制:从获取记录到数据库中更新记录,用户无法使用行。
  • 乐观并发控制:仅当数据实际更新时,其他用户无法使用行。此更新检查
    数据库中的行,并确定是否已进行
    任何更改 䍬。尝试更新已更改
    的记录 导致并发冲突。
  • "最后获胜":仅当数据实际更新时,其他用户才无法使用某一行。但是,没有努力进行比较 根据原始记录进行更新;记录是简单地写的 out,可能会覆盖其他用户
    自 您上次刷新了记录。