Как удалить все данные в таблице и вставить новые записи в базу данных Access с помощью VB.NET?

Я пытаюсь удалить все данные из таблицы в базе данных Access (*.mdb) в VB.NET, а затем повторно вставить в нее новые данные, однако получаю сообщение об ошибке «Синтаксическая ошибка в инструкции INSERT INTO» при выполнении следующего кода:

Imports System
Imports System.Data
Imports System.Data.SqlClient

...

    'test.mdb file
    'with a table "MyTable"
    'with two fields:
    '"name" (Memo), "value" (Memo)

    Dim con As New OleDb.OleDbConnection
    Dim dbProvider As String
    Dim dbSource As String
    Dim ds As New DataSet
    Dim da As OleDb.OleDbDataAdapter
    Dim sql As String
    dbProvider = "PROVIDER=Microsoft.Jet.OLEDB.4.0;"
    dbSource = "Data Source = C:\Users\Max\Desktop\test.mdb"
    con.ConnectionString = dbProvider & dbSource
    con.Open()
    sql = "SELECT * FROM MyTable"

    'select data from database, fill and clear dataset to get the table schema
    da = New OleDb.OleDbDataAdapter(sql, con)
    da.Fill(ds, "MyTable")
    ds.Clear()

    'add a new row in the dataset
    Dim dsNewRow As DataRow = ds.Tables("MyTable").NewRow()
    dsNewRow.Item("name") = "TESTNAME"
    dsNewRow.Item("value") = "TESTVALUE"
    ds.Tables("MyTable").Rows.Add(dsNewRow)

    'update the database
    Dim objCommandBuilder As New OleDb.OleDbCommandBuilder(da)
    da.Update(ds, "MyTable")
    ds.Dispose()
    da.Dispose()
    con.Close()
    con.Dispose()

person Max    schedule 13.12.2013    source источник
comment
Если вы измените имена полей, имя на fld1 и значение на fld2 и измените свой код VB.Net, чтобы использовать эти новые имена полей, вы все равно получите эту ошибку? Или может другая ошибка?   -  person HansUp    schedule 13.12.2013
comment
Изменив имена полей, код работает, но я не знаю, почему!!!!   -  person Max    schedule 13.12.2013
comment
Name и Value являются зарезервированными словами, поэтому не являются хорошим выбором для имен объектов базы данных Access.   -  person HansUp    schedule 13.12.2013


Ответы (1)


  1. Сделайте резервную копию файла Access db.
  2. Переименуйте эти два поля в MyTable: name в fld1; и value в fld2
  3. Адаптируйте свой код VB.Net для использования этих имен.

Вы указали, что эти шаги устранили ошибку.

Проблема заключалась в том, что и name, и value являются зарезервированными словами. В некоторых ситуациях механизм базы данных Access может без проблем принимать зарезервированные слова в качестве имен полей. Тем не менее, кажется менее снисходительным, когда задействован OleDb.

В идеале избегайте зарезервированных слов для имен объектов Access db. Эта связанная страница содержит ссылку на бесплатную утилиту (DbIssueChecker.zip), которую вы можете использовать для проверки Доступ к файлу db для имен проблем и других вопросов.

person HansUp    schedule 13.12.2013