Microsoft.Jet.OLEDB.4.0 и DBF

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Monstria
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 29.07.2010 (Чт) 11:25
Откуда: Нижний Новгород

Microsoft.Jet.OLEDB.4.0 и DBF

Сообщение Monstria » 02.02.2011 (Ср) 17:03

В программе с помощью Microsoft.Jet.OLEDB.4.0 происходит запись и чтения в базу dBase (*.dbf) - все работает, но исключительно медленно. Скажем так таблица из нескольких тысяч строк заполняется несколько часов, что есть не совсем нормально - есть способы ускорить работу?
Код: Выделить всё

        Dim oleConnect As New OleDb.OleDbConnection
        Dim oleCommanda As New OleDb.OleDbCommand
        Dim oleReader As System.Data.OleDb.OleDbDataReader
        Dim adapter As OleDbDataAdapter
        DataTable.TableName = TableName
        'Создадим запрос на создание таблицы
        Dim strSQL As String = "CREATE TABLE " & TableName & " ("
        For i = 0 To DataTable.Columns.Count - 2
            strSQL &= DataTable.Columns(i).ColumnName & " char(" & DataTable.Columns(i).MaxLength & "), "
        Next
        'Готовим запрос UPDATE
        strSQL = Mid(strSQL, 1, strSQL.Length - 2) & ")"
        Dim strSQL_Update As String = "UPDATE TABLE " & TableName & " SET "
        For i = 0 To DataTable.Columns.Count - 2
            strSQL_Update &= DataTable.Columns(i).ColumnName & "=@" & DataTable.Columns(i).ColumnName & ", "
        Next
        'Готовим запрос INSERT
        strSQL_Update = Mid(strSQL_Update, 1, strSQL_Update.Length - 2)
        Dim strSQL_Insert As String = "INSERT INTO " & TableName & " ("
        For i = 0 To DataTable.Columns.Count - 2
            strSQL_Insert &= DataTable.Columns(i).ColumnName & ", "
        Next
        strSQL_Insert = Mid(strSQL_Insert, 1, strSQL_Insert.Length - 2) & ") VALUES ("
        For i = 0 To DataTable.Columns.Count - 2
            strSQL_Insert &= "?, "
        Next
        strSQL_Insert = Mid(strSQL_Insert, 1, strSQL_Insert.Length - 2) & ")"
        Try
            oleConnect.ConnectionString = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=dBASE IV;User ID=Admin;Password=;", Mid(fileDBF, 1, fileDBF.LastIndexOf(TableName)))
            oleCommanda.Connection = oleConnect
            oleCommanda.CommandTimeout = 10
            oleCommanda.CommandType = CommandType.Text
            oleCommanda.CommandText = strSQL
            oleConnect.Open()
            oleCommanda.ExecuteNonQuery()
            oleCommanda.CommandText = "SELECT * FROM " & TableName & ".dbf"
            adapter = New OleDbDataAdapter(oleCommanda)
            adapter.InsertCommand = New OleDbCommand(strSQL_Insert)
            adapter.InsertCommand.Connection = oleConnect
            'Задаем параметры команды INSERT
            For i = 0 To DataTable.Columns.Count - 2
                adapter.InsertCommand.Parameters.Add(DataTable.Columns(i).ColumnName, OleDbType.Char, DataTable.Columns(i).MaxLength, DataTable.Columns(i).ColumnName)
            Next
            Dim ds As New DataSet
            Dim nowTable As DataTable = DataTable.Clone
            nowTable = DataTable.Copy
            nowTable.Columns.Remove("DATA0")
            Dim myRows() As DataRow = nowTable.Select
            ds.Tables.Add(nowTable)
            adapter.Update(ds, TableName)
            oleConnect.Close()
        Catch ex As Exception
            MsgBox(ex.ToString, vbCritical)
        Finally
            If Not oleConnect Is Nothing Then
                If oleConnect.State <> ConnectionState.Closed Then
                    oleConnect.Close()
                End If
            End If
        End Try

Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 35

    TopList  
cron