【问题标题】:The best way to insert foxpro 6 table by C#用 C# 插入 foxpro 6 表的最佳方法
【发布时间】:2013-04-26 17:06:18
【问题描述】:

我有一个将记录插入到 foxpro 表的任务。 有一个名为“submitid”的列,但它不是主键。我将不得不以 max(submitid) + 1 的增量插入一个数字。 如果两个用户同时提交相同的查询怎么办。会不会有相同的重复提交ID?

【问题讨论】:

    标签: c# asp.net .net sql foxpro


    【解决方案1】:

    您可以使用 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) ] )"
    

    【讨论】:

    • 什么是 chr(13) + ["get number"] + chr(13)
    • chr(13) 是回车。 “获取号码”是实际获取下一个号码的代码的占位符。我应该将 SELECT max(myID) + 1 AS maxid FROM MyTable INTO CURSOR NextNo + CHR(13) + nNextID = NextNo.maxid 或类似的东西放入实际的下一个数字。但是我现在不在 FoxPro 面前,也想不出一个命令可以得到下一个数字。所以上面应该可以工作,并且可以在 Insert 语句中使用 nNextID。
    【解决方案2】:

    对于并发用户,您最终可能会复制 id。我在 FoxPro 中看到处理这个问题的一种方法是使用一个表来跟踪当前 id,这很像 postgres 中的序列,而不是使用 Max。如果您想确定的话,还包括在检索和增加值之前锁定表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-17
      • 1970-01-01
      • 1970-01-01
      • 2015-05-10
      • 1970-01-01
      相关资源
      最近更新 更多