2013-04-26 1 views
1

У меня есть назначение, которое будет вставлять записи в таблицу foxpro. Существует столбец «submitid», но это не первичный ключ. Мне нужно будет ввести число с шагом max (submitid) + 1. Что делать, если два пользователя одновременно отправляют один и тот же запрос. Будет ли у него такой же дублированный submitid?Лучший способ вставить таблицу foxpro 6 на C#

ответ

2

С одновременными пользователями вы можете в конечном итоге дублировать идентификатор. Один из способов, которым я видел это в FoxPro, - это таблица для отслеживания текущего идентификатора, как и последовательность в postgres, и отработка этого, а не использование Max. Будет также включать блокировку таблицы перед извлечением и увеличением значения, если вы хотите быть уверенным.

4

Вы можете использовать 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) ])" 
+0

что CHR (13) + [ "получить номер"] + CHR (13) – RoyT

+0

КПЧ (13) является carrige возвращение. «Получить номер» является владельцем места для кода, который фактически получает следующий номер. Я должен был поставить SELECT max (myID) + 1 AS maxid FROM MyTable INTO CURSOR NextNo + CHR (13) + nNextID = NextNo.maxid или что-то подобное, чтобы получить фактическое следующее число. Но сейчас я не прямо перед FoxPro и не могу придумать одну команду, которая получит следующий номер. Таким образом, вышеприведенное должно работать, и nNextID может использоваться в инструкции Insert. – Jerry

Смежные вопросы