我想锁定一条记录,以防止在我使用时无人更新。
但是在锁定记录之后,即使我自己也无法更新锁定记录:(
在更新记录之前是否必须解锁?
或者有没有办法更新我自己锁定的记录?
string query = "SELECT * FROM table1";
AdsCommand cmd = conn.CreateCommand();
cmd.CommandText = query;
AdsExtendedReader reader = cmd.ExecuteExtendedReader();
reader.Read();
int recordNo = reader.RecordNumber;
reader.LockRecord(recordNo);
// do something with table1 record
// while doing something, I need to lock the record before I update record
AdsCommand cm = new AdsCommand("UPDATE table1 SET field1 = 'UPDATED'", conn);
cm.ExecuteNonQuery();
答案 0 :(得分:4)
无法在“直接”(而不是通过SQL操作)打开的表与SQL操作或其他表实例之间共享记录锁。
一种可能性是在获得锁定后通过扩展阅读器进行更新。您可以使用SetString或SetValue。
reader.SetString( colNumber, 'UPDATED' );
另一种可能性是更新交易记录。然后该记录将被该用户锁定,直到提交事务为止。例如,你可以使用类似下面的语句作为“no-op”(假设不涉及触发器)来锁定事务中的记录而不修改数据:
UPDATE table1 set field1 = field1 WHERE pk=1;
答案 1 :(得分:0)
您无法锁定它,然后使用其他SQL语句更新它;这将打开查询的另一个实例,这是因为您使用第一个锁定表而无法实现。只是不要担心锁定它,并运行您的UPDATE
语句。 ADS将锁定记录,进行更改并自动为您解锁。
// Note I added a WHERE statement with a dummy value for `finvno`, since your
// select didn't provide one
AdsCommand cm = new AdsCommand("UPDATE table1 SET field1 = 'UPDATED' WHERE finvno = 'SomeInvNo'", conn);
cm.ExecuteNonQuery();