c# - 当记录被锁定时,如何安全地退出 DBMS?

标签 c# sql-server database

我是一名业余程序员,但已经有一段时间了。我正在编写一个用于工作的小型文档管理应用程序(在 c# 中)。当用户打开记​​录时,我会更新它以指示它当前已锁定以供编辑。

我不确定的是如何确保在应用程序不安全退出(例如计算机意外关闭)时更新数据库?另外,当应用程序通过用户关闭的计算机退出时,我应该如何更新它?我只是想确保我的记录不会在没有人查看时被标记为锁定。

最佳答案

下面是 SQL Server 的通常做法。开发人员颁发的“记录锁”与客户端-服务器架构无关。您将共享文件架构与客户端-服务器架构混淆了。

确保表有时间戳列(由数据库引擎自动更新)。

读入要编辑的行。将行中的时间戳放入变量中。

更新语句如下所示:

update myTable
set col = {some value}
where id = {your id}
AND
timestampcolumn = {the timestamp the row had when you read it in}

如果有人在您读入后更改了该行,它将具有不同的时间戳,并且没有记录会匹配您的 WHERE 子句条件,因此您的更新将失败。然后您可以决定要做什么。

当您使用 SQL-Server(或 Oracle 或任何真正的客户端-服务器架构)时,您可以拔掉客户端 PC 的插头,而不会对服务器产生任何不利影响。

关于c# - 当记录被锁定时,如何安全地退出 DBMS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4184022/

相关文章:

mysql - CREATE TABLE - 适用于 MySQL 但不适用于 Bash

java - Hibernate 中使用 Criterion 的嵌套查询

c# - 使用 C# 创建 Azure 存储帐户抛出异常 "The request was aborted: Could not create SSL/TLS secure channel."

sql - 字符串拆分sql函数仅返回字符串中的第一个单词

c# - 将程序集添加到 SQL Server 2012 时出错

sql-server - SQL Server 2008执行计划中的 "Missing Index Impact %"是什么意思?

javascript - C# mv5 通过链接传递参数然后在 View 中获取它

c# - 将集合绑定(bind)到列表框

c# - 如何定位广泛版本的 Microsoft Office 互操作程序集?

php - 当某些参数可能为NULL时,如何在php文件中编写mySQL搜索查询?