Скопируйте System.Data.Datatable для доступа к БД программным путем Vb.net

Я просмотрел очень много вопросов / ответов здесь, я уверен, что это уже задавалось раньше, но я не могу найти это, поскольку это относится к моей конкретной ситуации.

У меня есть system.data.datatable из общего источника (может быть что угодно), и мне нужно иметь возможность экспортировать его в Access. Первоначальный источник может быть на самом деле sql, excel и т. Д., Но он успешно сохранен в system.data.datable (без проблем).

В коде я создаю новый файл Access DB .accdb, создаю таблицу, просматривая столбцы и переводя типы данных. Это выполняется успешно.

Затем мы получаем код, который проблематичен:

  Try

        dt.TableName = tableName
        Using accConnection As New OleDb.OleDbConnection(String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Persist Security Info=False;", dbPath))

            'first create table
            CreateTable(accConnection, dt, tableName)

            'set up dataadapter to copy data over
            Dim selectCommand As String = String.Format("SELECT * From {0}", tableName)
            Dim accDataAdapter As New OleDb.OleDbDataAdapter(selectCommand, accConnection)
            'accDataAdapter.TableMappings.Add(tableName, tableName)

            Dim accCommandBuilder As New OleDb.OleDbCommandBuilder(accDataAdapter)
            accDataAdapter.InsertCommand = accCommandBuilder.GetInsertCommand
            'accDataAdapter.UpdateCommand = accCommandBuilder.GetUpdateCommand
            CleanUpInsertCommand(accDataAdapter.InsertCommand)
            'CleanUpUpdateCommand(accDataAdapter.UpdateCommand)

            accDataAdapter.Update(dt.Copy)

        End Using

    Catch ex As Exception
        Utility.HandleExceptionWithDefaults(ex, String.Format("Copying {0} to {1}", tableName, dbPath))
        Return False
    End Try

Кажется, это работает нормально до последнего вызова.Update(dt.copy), где я получаю синтаксическую ошибку вставки. "CleanUpInsertCommand" просто добавляет скобки к именам столбцов (поскольку они могут включать пробелы, ключевые слова или что-то еще, что пользователь мог ввести), и не является причиной. Вот мой InsertCommand.CommandText в моем текущем тесте после манипуляций до вызова обновления:

INSERT INTO Addendum_A_Preview ([variablename1] , [variablename2], [variablename3], [variablename4], [variablename5], [variablename6], [variablename7], [variablename8]) VALUES (?, ?, ?, ?, ?, ?, ?, ?)

Насколько я знаю, все выглядит хорошо, так как я предполагаю, что обновление заполняет значения '?' с соответствующим значением во время вызова обновления. Если я ошибаюсь, пожалуйста, поправьте меня (вызов обновления для меня является чем-то вроде черного ящика, я бы не стал использовать отражатель на нем).

Я не вижу, что является причиной проблемы, и я получаю эту ошибку: Исключение: синтаксическая ошибка в инструкции INSERT INTO. Тип: System.Data.OleDb.OleDbException

Пожалуйста помоги. Я буду биться головой о клавиатуру, пока кто-нибудь не ответит.

Телефонный код:

    Dim dt As DataTable = DirectCast(gridData.DataSource, DataTable)
    Dim dbPath As String = String.Format("{0}\{1}.accdb", FileIO.SpecialDirectories.Desktop, _outputFileName) 'FileIO.SpecialDirectories.Desktop, _outputFileName)

    AccessHelper.CreateNewDatabase(dbPath)
    AccessHelper.AddTableToDatabase(dbPath, dt, _outputFileName.Replace(" "c, "_"c))

Последняя строка вызывает рассматриваемый код.

РЕДАКТИРОВАТЬ: Решение закончилось тем, что мое имя таблицы не было в скобках. Спасибо всем!

0 ответов

Другие вопросы по тегам