OleDbCommandBuilder OleDbDataAdapter Проблема VB.Net

У меня есть поле в базе данных доступа 2003 года с именем first. Я запускаю команду обновления адаптера данных, выдает «Синтаксическая ошибка в операторе UPDATE». Меняю имя поля на firstName, пробую обновить еще раз, работает. У меня уже есть куча программ, использующих базу данных и использующих поле «first», мне действительно нужно переименовать свое поле, вернуться и обновить все мои программы, чтобы они читались из firstName вместо first? Я действительно не хочу идти по этому пути, если мне это не нужно. Какие-либо предложения? Спасибо!

(поставщик = microsoft.jet.oledb.4.0)

* Редактировать: я хотел указать, что хочу, чтобы в ответе использовался построитель команд (но это не сработает). Извините за путаницу.


person DontFretBrett    schedule 06.05.2011    source источник


Ответы (3)


Сделайте это с вашим объектом commandbuilder:

Dim cmdBuilder As New OleDb.OleDbCommandBuilder(oledbAdapter)
cmdBuilder.QuotePrefix = "["
cmdBuilder.QuoteSuffix = "]"

Это поместит скобки вокруг всех имен полей. У меня была такая же проблема с полем с именем Index, и это решило ее.

person Shawn    schedule 24.01.2012

Попробуйте заключить в квадратные скобки имя поля [first].

person Casey Wilkins    schedule 07.05.2011
comment
Кроме того, если вы полностью укажете его с именем таблицы, вы избежите проблемы с зарезервированным словом (в чем проблема здесь). То есть MyTable.first. - person David-W-Fenton; 08.05.2011
comment
Я использую OleDBCommandBuilder, и он не дает вам возможности включать имена таблиц таким образом. - person DontFretBrett; 10.05.2011
comment
Кронштейны не исправят. Думаю, мне нужно написать свои собственные операторы вставки/обновления SQL или изменить имя поля. Я понимаю, что не должен использовать зарезервированные слова в качестве имен полей, но я удивлен, что Microsoft не предусмотрела решение этой проблемы. - person DontFretBrett; 10.05.2011
comment
Квадратные скобки должны заключать имя поля в вашем операторе SQL. Пробовали ли вы получить оператор, который генерирует OleDBCommandBuilder, и изменить его, включив в него скобки или имя таблицы? Если вы опубликуете свой код, мы, вероятно, сможем вам помочь. - person Casey Wilkins; 10.05.2011
comment
MS делала решение этой проблемы, предоставив более одного обходного пути для зарезервированных слов. Тот факт, что ваши инструменты разработки имеют слишком много слоев между вами и базой данных и не позволяют вам использовать эти обходные пути, не является ошибкой ядра базы данных. - person David-W-Fenton; 12.05.2011
comment
Какие обходные пути вы имеете в виду? Ваши предложения не сработали. Спасибо за попытку. Под слишком большим количеством слоев вы подразумеваете один, oledbcommandbuilder. В данном случае это проблема объекта (никто не утверждал, что виноват механизм базы данных, кроме вас). Я вынужден не использовать объект и делать свой собственный SQL, используя скобки. Но мой вопрос заключался в том, есть ли способ заставить его работать с построителем команд. - person DontFretBrett; 13.05.2011
comment
Вы пытались получить SQL, который генерирует OleDBCommandBuilder, и просто заменить первый на [first]? Кажется, я помню, что делал это раньше. Кстати, ваш вопрос был не в том, можно ли вообще заставить его работать с построителем команд. Вам дали два ответа, которые сработают, затем вы взяли мой, скопировали его в свой ответ и отдали себе должное. - person Casey Wilkins; 13.05.2011
comment
Написание моего собственного SQL не было ответом, который я искал, извините. Это как раз то, с чем я соглашаюсь. Вы не получаете признания за концепцию написания собственного SQL. Я обязательно буду более конкретным в следующем вопросе. (Я не стал извлекать оператор SQL из построителя команд. Я уже знал о квадратных скобках и пробовал их. Вы не ответили мне на это, но спасибо за попытку) - person DontFretBrett; 13.05.2011
comment
Я хочу сказать, что проблема не в Access/Jet/ACE, а в оболочках взаимодействия с базой данных .NET. Это не похоже на то, что квалификатор для зарезервированных слов или полные поля являются экзотическими функциями только для доступа — каждая машина базы данных, о которой я могу думать, имеет ту или иную форму этих функций, и если ваша оболочка базы данных абстрагирует вас от вашей способности использовать их, тогда это проблема с оболочкой базы данных. - person David-W-Fenton; 14.05.2011

oledbcommandbuilder прерывается, когда имена полей содержат зарезервированное слово «first». Пришлось писать свой SQL

person DontFretBrett    schedule 12.05.2011