Вам не обязательно менять свой запрос. Почти наверняка происходит то, что одно из имен ваших столбцов является зарезервированным словом или содержит пробелы или другие специальные символы. Существует несколько способов решения этой проблемы.
Первый и лучший вариант - изменить имена столбцов. Вы никогда не должны использовать пробелы или специальные символы в именах столбцов, и вы должны избегать зарезервированных слов. Похоже, что это данные для входа в Access, что делает вероятным, что один из ваших столбцов называется Password
. Это действительно зарезервированное слово в Jet SQL. Если бы вы все делали правильно, то для начала вы бы не хранили пароли в виде открытого текста, а вместо этого хешировали их. В этом случае столбец может иметь имя PasswordHash
и проблема исчезнет. Если вы не можете изменить имя столбца на более подходящее, попробуйте другой вариант.
Другой вариант - не использовать подстановочные знаки в запросе. Построитель команд будет просто использовать имена столбцов такими, какие они есть, но если вы укажете столбцы явно, построитель команд будет использовать те же имена, что и вы. В этом случае вам нужно будет избегать любых имен столбцов проблем в вашем запросе, и тогда построитель команд будет делать то же самое, например,
Dim sql As String = "SELECT UserName, [Password] FROM manager_login_data"
Третий вариант - сообщить сборщику команд, чтобы он избегал имени каждого столбца. , что позволяет вам продолжать использовать подстановочные знаки в вашем запросе. Вы делаете это, устанавливая свойства QuotePrefix
и QuoteSuffix
. Как видно из приведенного выше примера SQL, префикс представляет собой открывающую скобку, а суффикс - закрывающую скобку. Некоторые другие базы данных могут использовать разные символы, например, MySQL использует могилу для обоих. Например,
With cb
.QuotePrefix = "["
.QuoteSuffix = "]"
End With
Вам нужно сделать это только один раз для каждого компоновщика команд, и вы должны сделать это перед вызовом Update
на адаптере данных. Наиболее разумным вариантом является сделать это там, где вы создаете компоновщик команд, например
Dim cb As New OleDbCommandBuilder(da) With {.QuotePrefix = "[",
.QuoteSuffix = "]"}