SQL code to insert multiple rows in ms-access table

后端 未结 8 1686
北荒
北荒 2020-12-15 14:01

I\'m trying to speed up my code and the bottleneck seems to be the individual insert statements to a Jet MDB from outside Access via ODBC. I need to insert 100 rows at a tim

8条回答
  •  一向
    一向 (楼主)
    2020-12-15 14:09

    Public Sub Insert_tb_TABLE_DATA_TABLE(ByVal arg_Data_Table As DataTable, Optional ByVal arg_Conn_Open As Boolean = False)
        Try
    
            If arg_Data_Table.Rows.Count = 0 Then
                Return
            End If
    
            If Not arg_Conn_Open Then
                _Connection_Access = New OleDbConnection(My.Settings.db_GENESIS_ACCESS)
                _Connection_Access.Open()
            End If
    
            Dim query As String = String.Empty
    
            query = String.Concat("INSERT INTO  (, , ,) SELECT * FROM (", _
                                                             " SELECT ", arg_Data_Table.Rows(0)("Field1"), " AS Field1, '", _
                                                                         arg_Data_Table.Rows(0)("Field2"), "' as Field2,", "'", _
                                                                         arg_Data_Table.Rows(0)("Field3"), "' as Field3, '", _
                                                                         arg_Data_Table.Rows(0)("Field4"), "' as Field4 FROM tb_REFERENCE")
            Dim lc_Count As Integer = 0
    
            For i As Integer = 1 To arg_Data_Table.Rows.Count - 1
    
                If lc_Count = 45 Then
                    query += ") AS TMP"
    
                    _Command_Access = New OleDbCommand(query, _Connection_Access)
                    _Command_Access.ExecuteNonQuery()
                    _Command_Access.Dispose()
    
                    query = String.Concat("INSERT INTO TABLE (, , ,) SELECT * FROM (", _
                                                             " SELECT ", arg_Data_Table.Rows(i)("Field1"), " AS Field1, '", _
                                                                         arg_Data_Table.Rows(i)("Field2"), "' as Field2,", "'", _
                                                                         arg_Data_Table.Rows(i)("Field3"), "' as Field3, '", _
                                                                         arg_Data_Table.Rows(i)("Field4"), "' as Field4 FROM tb_REFERENCE ")
                    lc_Count = -1
                Else : query += String.Concat(" UNION ALL SELECT ", arg_Data_Table.Rows(i)("Field1"), ", '", _
                                                                    arg_Data_Table.Rows(i)("Field2"), "',", "'", _
                                                                    arg_Data_Table.Rows(i)("Field3"), "', '", _
                                                                    arg_Data_Table.Rows(i)("Field"), "' FROM tb_REFERENCE ")
    
                End If
                lc_Count += 1
    
            Next
    
            query += ") AS TMP"
    
            _Command_Access = New OleDbCommand(query, _Connection_Access)
            _Command_Access.ExecuteNonQuery()
            _Command_Access.Dispose()
    
            If Not arg_Conn_Open Then _Connection_Access.Close()
        Catch ex As Exception
            MessageBox.Show(String.Concat("ERROR: ", ex.Message), "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1)
        Finally
            GC.Collect()
            GC.WaitForPendingFinalizers()
        End Try
    End Sub
    
        

    提交回复
    热议问题