Обновите имя столбца, который начинается с цифры в dbf-файле, с помощью oledb - PullRequest
0 голосов
/ 30 января 2020

Я пытаюсь обновить столбец с именем value в dbf-файле. Поскольку значение является зарезервированным словом, мне нужно добавить имя таблицы в запрос. Так что это работает:

UPDATE "C:\TEMP\TEST_PARAM.DBF" SET TEST_PARAM.value='new value' WHERE Id='Some ID';

Но теперь у меня проблема в том, что многие из моих dbf-файлов начинаются с цифр в именах файлов, а следующее не работает:

UPDATE "C:\TEMP\0016_PARAM.DBF" SET 0016_PARAM.value='new value' WHERE Id='Some ID';

У меня есть попытался заключить имя_таблицы в одинарные, двойные, [, ..., но ничего из этого не работает. Могу я попробовать что-нибудь еще?

1 Ответ

0 голосов
/ 30 января 2020

Вы не говорите, на каком языке вы это делаете, но здесь мы go в C#. Тот же подход должен работать на любом языке.

Вам необходимо открыть DBF под псевдонимом, и вы должны иметь возможность отправлять несколько команд через OLEDB.

Это должно работать.

* -- Open the dbf in the first available work area under the alias 'param'. 
* -- Now you don't have to worry about the zeroes.
OleDbCommand myCommand = new OleDbCommand(@"execscript([use 'C:\TEMP\0016_PARAM.DBF' in 0 alias param])", myConnection);

var result = myExecuteNonQuery();

* -- Now do the update, referring to the alias, not the DBF filename.
myCommand = new OleDbCommand(@"execscript([update param set param.value='new' where id='some id'])", myConnection);

result = myCommand.ExecuteNonQuery();

Что касается квадратных скобок, Visual FoxPro имеет три разделителя строк по умолчанию, а именно обычные одинарные и двойные кавычки, но также квадратные скобки.

Таким образом, мы используем двойные кавычки для строки C#. Команде Visual Foxpro, которую мы запускаем через ExecScript, также нужны кавычки, вокруг 'new' и 'some id', поэтому используются одинарные кавычки. Но нам нужно передать эту команду в Execscript в виде строки, чтобы строка использовала скобки.

...