【问题标题】:Locking SQL Server tables or rows between methods在方法之间锁定 SQL Server 表或行
【发布时间】:2012-04-13 13:57:46
【问题描述】:

我有一个导入 CSV 文件的 C# Winforms。

第一个方法导入它,然后调用第二个方法打开数据连接并获取最后一个logNumber,然后返回并将logNumber++ 分配给每条记录,然后将新的最后一个logNumber 写入表。

在此期间,我不希望其他用户能够访问logNumber 表(我也必须使用batchNumber 来执行此操作)。如果我使用我发现的悲观锁定,它只会在连接打开时锁定它们,所以如果我使用第二种方法,它将关闭。那么如何保持锁定呢?

我想我会以lvl (public partial class frmCheckEntry : Form) 的形式定义sqlconnection,但我收到了一个错误。当我打开子表单并进行更改时,我还需要锁定记录(行)(加载到 datatable 然后进入数据网格视图)。这是一个多用户系统,但我需要防止其他用户拥有甚至看到用户正在处理的记录。

【问题讨论】:

  • 也许你可以显示一些代码?
  • 你要找的概念是一个事务

标签: c# sql-server winforms csv


【解决方案1】:

解决方案是保持连接和事务打开。你说你这样做时出错了。您需要解释错误消息并修复它。然后,它会工作。

您也可以尝试使用 IsLocked = 1 标记“锁定”行。读取该行的其他用户需要显示“此项目当前正在使用”之类的消息。

【讨论】:

  • 找到了我认为的答案,我仍然需要完成测试,但首先我得到的错误是语法错误“字段初始化程序无法引用非静态字段、方法或属性”。现在解决方案我以 lvl 的形式声明了 sqlConnection,但分配了一个空的连接字符串: public SqlConnection lockCon = new SqlConnection();然后在我的方法中,我使用连接字符串属性来分配字符串:lockCon.ConnectionString = conStrn2;
  • 这会在表单级别设置连接,然后我可以在方法 lvl 中使用 open.lockCon,它应该保持打开状态,直到我关闭它或表单关闭。我现在可以在第一种方法中使用打开连接,我需要在我的 sql 语句中锁定表/记录,然后当我完成后关闭连接,锁将被关闭。
猜你喜欢
  • 1970-01-01
  • 2022-01-11
  • 1970-01-01
  • 2013-09-23
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多