C# OLEDB FOXPRO锁记录

C# OLEDB FOXPRO锁记录,c#,asp.net,oledb,foxpro,C#,Asp.net,Oledb,Foxpro,如何通过OLEDB锁定具有sono='12345'的foxpro表,而不是锁定整个表?使用rlock(),我可以按数字锁定记录,但不知道如何使用筛选器锁定记录 下面是我如何通过记录编号锁定表 string vfp=“[SET EXCLUSIVE OFF]+chr(13)+”; vfp+=“[在0别名a_表中使用表]+chr(13)+”; vfp+=“[LOCK('1,2,3,4','a_table')” 如果将“记录指针”定位到要锁定的记录上,然后调用RLOCK()而不带参数,则该记录将被锁定

如何通过OLEDB锁定具有sono='12345'的foxpro表,而不是锁定整个表?使用rlock(),我可以按数字锁定记录,但不知道如何使用筛选器锁定记录

下面是我如何通过记录编号锁定表

string vfp=“[SET EXCLUSIVE OFF]+chr(13)+”;
vfp+=“[在0别名a_表中使用表]+chr(13)+”;
vfp+=“[LOCK('1,2,3,4','a_table')”


如果将“记录指针”定位到要锁定的记录上,然后调用RLOCK()而不带参数,则该记录将被锁定

这一系列命令将完成此操作:

  SET EXCLUSIVE OFF
  USE table IN 0 ALIAS a_table
  SELECT a_table
  LOCATE FOR sono='12345'
  RLOCK()
这假设LOCATE命令实际查找sono='12345'的记录


或者,如果您有可以使用的索引,您可以使用SEEK命令或SEEK()函数。

您必须将过滤器设置为,然后循环通过过滤器并将记录编号存储到var,然后根据var中的记录编号锁定

 //Perhaps use a SQL Command to filter
 USE mytable in o ALIAS a_table
 SELECT RECNO() AS ID FROM mytable INTO CURSOR myCursor NOFILTER
 SELECT myCursor
 idList = ""
 LOCATE   &&Same as GO TOP
 SCAN
    idList = idList + ALLTRIM(STR(ID)) + ", "
 ENDSCAN
 SET MULTILOCKS ON   &&Remember to turn this ON
 isAllRecordsLocked = RLOCK(idList, 'a_table')  &&Perform RLOCK()

我如何找到所有具有sono='12345'的记录?正如Jerry所说,您需要建立一个具有sono='12345'的记录编号列表,然后锁定记录。您通过OleDB锁定记录的目的是什么。锁只在连接期间可用,如果您在完成尝试执行的操作之前断开连接,则无论如何都会丢失锁。Jerry的选项似乎最适合于多记录锁定的解决方案。不过,看起来您将做更多的工作,并最终尝试通过ExecScript()调用构建一个完整的运行过程。我不一定认为这是练习。
 //Perhaps use a SQL Command to filter
 USE mytable in o ALIAS a_table
 SELECT RECNO() AS ID FROM mytable INTO CURSOR myCursor NOFILTER
 SELECT myCursor
 idList = ""
 LOCATE   &&Same as GO TOP
 SCAN
    idList = idList + ALLTRIM(STR(ID)) + ", "
 ENDSCAN
 SET MULTILOCKS ON   &&Remember to turn this ON
 isAllRecordsLocked = RLOCK(idList, 'a_table')  &&Perform RLOCK()