Самый простой способ обновить таблицу OleDB из DataTable - PullRequest
0 голосов
/ 21 октября 2019

Какой самый простой способ (vb.NET) обновить полную таблицу OleDB из предыдущей измененной импортированной таблицы?

Вот что у меня есть.

Сначала я импортирую таблицу изAccess База данных:

Dim PRDB As String = "Provider=Microsoft.ACE.OLEDB.12.0;                                    
                      Data Source=<location>;
                      Jet OLEDB:Database Password=<password>"                                                        
Dim CNDB As New OleDb.OleDbConnection(PRDB)                                                                              
Dim CMDB As New OleDb.OleDbCommand                                                                                
Dim ADDB As New OleDb.OleDbDataAdapter(CMDB)                                                                       
Dim TBDB As New DataTable                                                                                                    

Try : CNDB.Open()
Catch EX As Exception : MsgBox(EX.ToString) : End Try

Try : CMDB.CommandText = "SELECT * FROM [TABLE 01]" : ADDB.Fill(TBDB)
Catch EX As Exception : MsgBox(EX.ToString) : End Try

Пока все хорошо. Мне удалось импортировать TABLE 01 успешно в TBDB.

Теперь, скажем, я меняю одну ячейку DataTable:

TBDB.Rows(2).Item(3) = "CHANGED"

Есть ли способ обновить непосредственноOleBD таблица без описания измененного адреса ячейки? Что-то вроде

ADDB.Update(TBDB) (?)

Я уже пробовал последний бит кода, но он не работал (я думаю, что он работает, только если аргумент является DataRow, а не DataTable).

Я исследовал этот вопрос, но все ответы, которые я нашел, выглядели немного сложными для этой (кажущейся) простой задачи. Поэтому мне интересно, есть ли более прямой способ сделать это - я также прочитал кое-что о Binders, но я не совсем понял метод.

Спасибо

Ответы [ 2 ]

1 голос
/ 23 октября 2019

Благодаря @Fadi мне удалось получить точный метод, который я искал, используя OleDbCommandBuilder:

Dim CMNDBUID As OleDb.OleDbCommandBuilder
CMNDBUID = New OleDb.OleDbCommandBuilder(ADDB)
CMNDBUID.GetUpdateCommand()

Затем я могу легко обновить таблицу Access:

Try : ADDB.Update(TBDB)
Catch EX As Exception : MsgBox(EX.ToString) : End Try 
0 голосов
/ 21 октября 2019

В SQL SERVER эквивалент:

Private Sub UpdateDBFromDataTable(myDataTable As DataTable)
    'Change with your connection string
    Dim connectionString As String = "Data Source = MyServerName/Instance; Integrated Security=true; Initial Catalog=YourDatabase"

    Using connection As SqlConnection = New SqlConnection(connectionString)
        connection.Open()

        Using bulkCopy As SqlBulkCopy = New SqlBulkCopy(connection)

            For Each c As DataColumn In myDataTable.Columns
                bulkCopy.ColumnMappings.Add(c.ColumnName, c.ColumnName)
            Next

            'Put here your table name in Database
            bulkCopy.DestinationTableName = myDataTable.TableName

            Try
                bulkCopy.WriteToServer(myDataTable)
            Catch ex As Exception
                Console.WriteLine(ex.Message)
            End Try
        End Using
    End Using
End Sub
...