锁定数据库记录以进行编辑

2024-04-03

我有一个 SQL Server 2008 数据库和一个 asp.net 前端。

我想在用户当前正在编辑记录但不确定哪种方法是最佳方法时实现锁定。

我的想法是有一个isLocked记录的列,当用户拉出该记录时,它会设置为 true,这意味着所有其他用户都具有只读访问权限,直到第一个用户完成编辑。

但是,如果会话超时并且他/她从未保存/更新记录怎么办,记录将保留isLocked = true,这意味着其他人无法编辑它,对吗?

我怎样才能实现某种会话超时并有isLocked当会话超时(或在预定义的时间段后)时自动设置为 false

应该在asp.net端实现还是在SQL端实现?


根本不要这样做。使用乐观并发 http://msdn.microsoft.com/en-us/library/aa0416cz%28v=vs.110%29.aspx反而。

悲观锁定是可能的,但不适用于 .Net 应用程序。 .Net 应用程序场在技术上不具备维持长期会话以保持锁定的能力(通过sp_getapplock http://technet.microsoft.com/en-us/library/ms189823.aspx或者,更糟糕的是,通过实际数据锁定获得),因为 .Net 应用程序农场:

  • 跨实例负载均衡请求
  • 不要在 HTTP 调用之间保留请求堆栈
  • 回收应用程序域

在你说“我没有农场,只有一台 IIS 服务器”之前,我会指出你可能只有一台 IIS 服务器now如果你依赖它,你将永远无法横向扩展,而且你still存在应用程序域回收的问题。

通过应用程序特定更新(例如“is_locked”字段)模拟锁定在实际使用中存在严重缺陷,原因您已经开始看到,还有更多。当事情到了紧要关头时,这是唯一的方法can被要求工作,但我从未听说过anyone说“哎呀,我真的很高兴我们通过数据写入实现了悲观锁定!”。没有人,从来没有。

应用程序层锁定也是行不通的,出于完全相同的原因,.Net 场无法使用后端锁定(负载平衡、调用之间缺乏上下文、应用程序域回收)。编写分布式锁定应用程序协议是行不通的,这条路是由尸体铺成的。

只是不要这样做。乐观并发在各个方面都好得多。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

锁定数据库记录以进行编辑 的相关文章

  • 将两行中相似的列数据合并到一行中

    我的查询结果具有以下特征 LIDCode Total Domain Region VSE Version AB02 15 GLOBAL CANLA 0 6943 AB02 5925 CENTRE STREET SW 31 GLOBAL CA
  • jquery ajax可以调用外部webservice吗?

    jquery ajax代码可以调用吗网络服务来自另一个域名或另一个网站 像这样 ajax type POST url http AnotherWebSite com WebService asmx HelloWorld data name
  • 插入多行并返回主键时 Sqlalchemy 的奇怪行为

    插入多行并返回主键时 我注意到一些奇怪的事情 如果我在 isert 查询中添加使用参数值 我会得到预期的行为 但是当将值传递给游标时 不会返回任何内容 这可能是一个错误还是我误解了什么 我的sqlachemy版本是0 9 4 下面如何重现错
  • Microsoft.Extensions.Caching.Redis 选择与 db0 不同的数据库

    一个关于了解使用哪个redis数据库以及如何配置它的问题 我有一个默认值ASP NET Core Web 应用程序和默认配置的本地redis服务器 含15个数据库 通过包管理控制台我已经安装了 Install Package Microso
  • Oracle 中的 SQL 调优 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有任何文章 链接可以让我找到 SQL 调优 Oracle 的示例 如果能用例子来解释那就太好了 我需
  • sql查询将两列与一列连接起来

    我在 MS Access 2010 中有 2 个表 如下所示 USERS u id u name LOAN l id l from ref users u id l to ref users u id l amount Users u id
  • 使用 MS Access 获取行的第一个实例

    EDITED 我有这个查询 我想SELECT表中记录的第一个实例petTable SELECT id pet ID FIRST petName First Description FROM petTable GROUP BY pet ID
  • SQLite HAVING 比较错误

    我有一个测试 SQLite 表 用于存储带有值的报告数据 CREATE TABLE IF NOT EXISTS test fact daily revenue date TEXT revenue NUMERIC product TEXT I
  • 如何在Oracle中使用Timestamp_to_scn和Scn_to_timestamp?

    我的查询结果是这样的 select cast to date a start time mm dd yyyy hh mi ss pm as timestamp date of call ora rowscn from calling tab
  • 从表单身份验证中排除页面 - ASP.NET

    我知道有两种方法可以从表单验证中排除页面 通过使用包含需要排除的页面的文件夹中的另一个 web config 文件 或者使用 location 元素
  • 如何在 SQL Server 中使用 nvarchar 变量为 unicode 用户添加前缀“N”?

    如何在 SQL Server 中使用 nvarchar 变量为 unicode 用户添加前缀 N 例如 给定这个变量 declare Query1 nvarchar max 我可以这样分配它 set Query1 N 但是如果我想使用怎么办
  • Page_ClientValidate 未定义

    我正在使用 ASP NET 2 0 并使用 IE8 作为我的默认浏览器 但无论我尝试多少次 Page ClientValidate一直给我这个错误 它没有定义 我怎么解决这个问题 请帮忙 所以 我想你的页面中可能没有任何RequiredVa
  • 拆分列中的字符串并在列中添加值

    我有一个包含几行数据的表 如下所示 16 W 2 Work ALBO 00 Proposal ALxO Amendement 1 20091022 signed pdf 17 W 2 Work ALBO 00 Proposal Level1
  • Mysql 检索所有有限制的行

    我想检索特定用户的所有行 限制为 0 x 所以我只是想问是否有任何方法可以检索 mysql 中的所有行 而不调用返回 x 的 count id 的方法 而不重载现有函数 该函数在查询中根本没有限制 与我们的 string Relace 功能
  • 如何在使用连接池时强制 SqlConnection 物理关闭?

    我明白 如果我实例化一个 SqlConnection 对象 我实际上是从连接池中获取一个连接 当我调用 Open 时 它将打开连接 如果我对该 SqlConnection 对象调用 Close 或 Dispose 方法 它将返回到连接池 但
  • 使用实体框架重叠约会

    我将 asp net mvc 与实体框架一起使用 我有一个包含 startat 字段 endat 字段和 roomid 字段 称为 SpaceConfigurationId 的约会列表 并且希望查找给定房间已重复预订的约会列表 可以假设 e
  • 如何强制 Visual Studio 2008 生成 Designer.cs,例如不管怎样.aspx.designer.cs

    我在使用 Visual Studio 2005 使用网站技术生成的 Asp Net V2 0 中有一些 Web 表单 想要将它们导入到设置为 v3 5 Asp Net MVC 的 Visual Studio 2008 我在其中使用项目技术
  • 列中差异的数量

    我想检索一列每行中有多少个字母的差异 例如 如果您有一个值 test 而另一行有一个值 testing 则 test 和 testing 之间的差异为 4 个字母 该列的数据值为 4 I have reflected about it an
  • sql server 按组排名

    问题看似简单 但我却无法理解 这是针对 sql 服务器的 what I have in a table What I need as a output cksum id cksum id 2162514679 204 2162514679
  • 如何从 PostgreSQL 中的时间戳列值提取一天中的时间(或小时)?

    我正在尝试从 PostgreSQL 中的 时间戳 列中提取一天中的时间 这是我的做法 但是 太糟糕了 知道如何做得更好吗 SELECT date part hour date demande text hours date part min

随机推荐

  • 相对于绝对定位元素的定位 - 有可能吗?

    我在页面上有一些绝对定位的空间 然后在这个空间中有多个绝对定位的元素 效果很好 每当我需要添加另一个元素时 我不必担心页面流量 我只是使用 x y 平面将其放在我想要的位置 我遇到的问题是 现在我在绝对定位元素之一中有一些动态内容 随着它的
  • 如何为具有默认导出的模块编写类型定义

    我想写一个类型定义storybook router https www npmjs com package storybook router 它不必那么准确 因为这是一个次要的开发工具 即anys 是可以接受的 但我什至似乎无法让它发挥作用
  • 输入类型标签属性的有效顺序

    我知道这是非常基本的问题 希望不是那么重要 但我想知道答案 请不要建议仅参考链接 我们每天都会面对
  • laravel 5.2 - 搜索功能

    我希望在我的网站上进行自定义搜索 这是 MySQL 搜索 选择 从MyDB MyTable WHERE id喜欢 MySearch 或firstname喜欢 MySearch 或lastname喜欢 MySearch 或email喜欢 My
  • 有没有办法将外部函数内联到 EF Linq 查询中?

    假设我有一个这样的函数 var filterValue GetCurrentFilter state 然后是 EF 查询 var result context EntitySet Where x gt x column gt filterV
  • 以富文本形式 Markdown 到剪贴板

    在 Windows 上使用 Python 我尝试获取一个 Markdown 文件并将其作为富文本粘贴到我的剪贴板中 大部分拼图都很简单 将 Markdown 解析为 HTML 没有问题 通过 TKinter 将内容放入剪贴板 是的 但这是我
  • 如何限制长表中 \multicolumn 单元格的大小?

    我在 LaTeX 中有一个非常长的表格 跨越多个页面 并且 就像现在一样 对于页面来说也太宽了 我正在使用 longtable 包 其中每个列的宽度都由p width 命令 问题是 大多数行包含多列调用 因此不遵守前导码p width 命令
  • Oracle:指定对象类型列的默认值

    我有一个带有无参数构造函数的对象类型 但是当我将其指定为该类型的列的默认值时 我收到 ORA 00904 无效标识符错误 Example CREATE OR REPLACE TYPE test t AS OBJECT val NUMBER
  • 将 CTE 应用于递归查询

    我正在尝试应用 CTE 和递归查询 数据库为 MariaDB 10 2 或更高版本 业务规则如下 账户可以是控股账户 也可以是投资组合账户 控股由一定数量的货币组成 持股可以是活跃的也可以是非活跃的 一个投资组合包含零个或多个账户 并且这些
  • OkHTTPClient代理认证如何进行?

    问题 如何向 OkHTTP 添加授权代理 我知道 OkHTTP 的构建者是否支持代理 http square github io okhttp 3 x okhttp 虽然我很难设置一个 Given a Url and a base64 en
  • 加密 (cryptojs) - 解密 (erlang)

    我有一个使用 cryptoJS AES 加密的值 需要使用 Erlang 加密库进行解密 对我来说问题在于能够在 Erlang 中使用解密aes cbc 128 decrypt Key IVec Cipher 我想 我需要知道使用的 IVe
  • 错误“您的推送将发布私人电子邮件地址”

    我对 GitHub 很陌生VCS https en wikipedia org wiki Version control 当我尝试在 GitHub 上共享我的项目时 收到以下错误消息 Can t finish GitHub sharing
  • 使用 jQuery 替换字符

    我正在尝试从键盘上的所有文本框中删除逗号 我想出了下面的脚本 但它不起作用 谁能看到我做错了什么吗 NOTE 请原谅脚本中的 所以不会让我发布它 否则 您可能希望将整个代码块包装在文档就绪函数中 function input text ke
  • 不使用相关性直接在ASM中调用/跳转(x86)

    我正在将一个 C DLL 注入到游戏中 并且想将一个函数挂接到我自己的一些代码上 由于DLL每次都会映射到不同的位置 因此直接跳转和调用会更容易 另外 因为这是一个钩子 所以当我返回该函数时 我不想更改堆栈或寄存器 我声明一个 char 来
  • 是否有任何算法可以使循环赛安排具有每轮独特的组合?

    假设我有 10 个参与者的数组 1 2 3 4 5 6 7 8 9 10 假设一个联赛有10名参赛者 那么每个参赛者将与其他9名参赛者进行9场比赛 因此 每位参赛者将进行9轮单场比赛 例如 第一轮 1 2 3 4 5 6 7 8 9 10
  • 是否有 C++ 位域的可移植替代方案

    在许多情况下 尤其是在低级编程中 数据的二进制布局很重要 例如 硬件 驱动程序操作 网络协议等 在 C 中 我可以使用读 写任意二进制结构char 和按位运算 掩码和移位 但这是乏味且容易出错的 显然 我尝试限制这些操作的范围并将它们封装在
  • 季度的天数?

    我将如何实施dayNumber of quarter 例如 3 月 3 日 第一季度 应返回 62 31 一月 28 二月 3 三月 4 月 29 日 第二季度 应返回 29 到目前为止我的代码 int month getMonth dat
  • NSDateFormatter 无法设置 setTimeZone

    我想知道两个日期之间的差异 包括天 小时 分钟和秒 为此 我使用下面的代码 但它不起作用 void UpdateTableViewCellWithNSTimer NSString gameTime UIView inputView NSDa
  • 如何使用 C# MVC4 调用 $.ajax 中的错误函数?

    我有一个使用 C 的 MVC4 项目 在这个项目中 我的一个控制器有一个由 Ajax 函数调用的方法 HttpPost public string EditPackage int id string newPkgName try do lo
  • 锁定数据库记录以进行编辑

    我有一个 SQL Server 2008 数据库和一个 asp net 前端 我想在用户当前正在编辑记录但不确定哪种方法是最佳方法时实现锁定 我的想法是有一个isLocked记录的列 当用户拉出该记录时 它会设置为 true 这意味着所有其