Проблема с запросом вставки в таблицу Paradox с использованием C # - PullRequest
7 голосов
/ 06 декабря 2010

У меня есть таблицы Paradox 5.x, к которым мне нужно подключиться, чтобы выбрать и обновить. Я использую OLEDBConnection.

Выбор из таблиц у меня нет проблем. при попытке вставить в таблицы я столкнулся с проблемой при вводе жестко закодированных полей namesi я получил ошибку: Оператор INSERT INTO содержит следующее неизвестное имя поля: ... поэтому я использовал OleDbDataReader.GetName (...), чтобы получить имена полей. теперь я использую имена полей, полученные из таблицы, чтобы вставить их в таблицу, и все равно получаю ту же ошибку.

Мне кажется, проблема в названии поля: «Серийный номер грузовика № 1». Название таблицы: «Транспортные средства»

Я пытался использовать [],. "",. [] И . [ ""].

Я читал о необходимости двигателя Borland, но я не уверен, что это проблема. Спасибо заранее.

- = Наум = -

p.s Я не могу изменить имя таблицы, так как это база данных Castumer, мне нужно подключиться.

Я добавляю код C #, который я использую:

private static string createInsertQueryVehicle(string i_VehicleNumber, string i_VehicleMFG, string i_Truck1SerialNo, string i_Truck2SerialNo, string i_Truck3SerialNo)
        {
            string tryout = string.Format("INSERT INTO {0} ([{6}], [{7}], [{8}], [{9}], [{10}]) VALUES(RIGHT('{1}',10),'{2}','{3}','{4}','{5}')",
                TableName, Vnum, Vinfo, T1Serial, T2Serial, T3Serial, VnumFieldName, VinfoFieldName, T1SerialFieldName
                T2SerialFieldName,T3SerialFieldName);
            return tryout;
        }

в конце пробного отыгрыша:

INSERT INTO Vehicles ([Vehicle Number], [Vehicle Mfg], [Truck #1 Serial Number], [Truck #2 Serial Number], [Truck #3 Serial Number]) VALUES(RIGHT('000000010001525',10),'קרונות משא','ר40011_1','ר40011_2','')

EDIT: Просто хотел добавить мое решение в конце: В конце лучшее решение, которое я мог получить, состояло в том, чтобы использовать доступы в качестве точки соединения, используя tablse, связанный с таблицами парадоксов, в конце обрабатывая это как доступную базу данных ..... Надеюсь, это кому-нибудь поможет.

Ответы [ 3 ]

0 голосов
/ 03 июня 2011

Как вы нашли (несколько запутанное) решение ... Возможно, стоит включить трассировку ODBC и посмотреть, как Access передает имя поля, которое вызывает проблему. Это может быть просто escape-последовательность, которую парадокс принимает за хеш (#) или что-то подобное. Просто мысль.

0 голосов
/ 26 сентября 2017

Мне удалось воспроизвести проблему, создав таблицу (Table1) со столбцом со знаком числа (col #). Как:

INSERT INTO `Table1.db` (`col#`) VALUES ('a')

Где я запускаю этот SQL, я получаю эту ошибку:

The INSERT INTO statement contains the following unknown field name: 'col#'.  Make sure you have typed the name correctly, and try the operation again.

Это похоже на ошибку провайдера Microsoft JET. Единственный обходной путь - вставить значение в другой столбец, например

INSERT INTO `Table1.db` (`col1`) VALUES ('a')

А затем обновите столбец col #:

UPDATE `Table1.db` SET `col#` = col1

Я обнаружил другие проблемы с провайдером JET. Например, вы получите эту ошибочную ошибку, если таблица не имеет первичного ключа или пароля, защищенного:

Operation must use an updateable query.
0 голосов
/ 06 декабря 2010

Вы должны использовать идентификаторы в кавычках, имея специальный символ в именах полей или таблиц. Двойная кавычка (") должна быть тем, что вы ищете.

Кроме того, я считаю, что Borland Database Engine необходим для работы с базой данных Borland, такой как Paradox. По крайней мере, это то, что мне всегда говорили, хотя я еще никогда не сталкивался с такой архитектурой, так как я использовал Delphi при работе с Paradox.

...