【发布时间】:2013-04-26 17:06:18
【问题描述】:
我有一个将记录插入到 foxpro 表的任务。 有一个名为“submitid”的列,但它不是主键。我将不得不以 max(submitid) + 1 的增量插入一个数字。 如果两个用户同时提交相同的查询怎么办。会不会有相同的重复提交ID?
【问题讨论】:
标签: c# asp.net .net sql foxpro
我有一个将记录插入到 foxpro 表的任务。 有一个名为“submitid”的列,但它不是主键。我将不得不以 max(submitid) + 1 的增量插入一个数字。 如果两个用户同时提交相同的查询怎么办。会不会有相同的重复提交ID?
【问题讨论】:
标签: c# asp.net .net sql foxpro
您可以使用 OLEDB CommandText 通过使用 VFP 命令和函数来获取下一个数字并插入记录来完成此操作。
下面是伪的,但你应该明白。 “EXECS”是一个 VFP 功能,允许您执行本机 VFP 命令和功能。
oCommand.CommandText = "EXECS([USE MyTable AGAIN SHARED IN 0] + chr(13) + [FLOCK("MyTable")] + chr(13) + ["get number"] + chr(13) + [INSERT INTO MyTable (col1, col2) VALUES (nextid, othervalue) ] )"
【讨论】:
对于并发用户,您最终可能会复制 id。我在 FoxPro 中看到处理这个问题的一种方法是使用一个表来跟踪当前 id,这很像 postgres 中的序列,而不是使用 Max。如果您想确定的话,还包括在检索和增加值之前锁定表。
【讨论】: