Язык Visual Basic на платформе .NET.
Модераторы: Ramzes, Sebas
-
Monstria
-
- Начинающий
-
-
- Сообщения: 10
- Зарегистрирован: 29.07.2010 (Чт) 11:25
- Откуда: Нижний Новгород
-
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
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 23