У меня есть приложение VB.NET (Visual Studio 2010), которое создает программную базу Access 07, а затем импортирует CSV-файл в качестве новой таблицы Access , БД создается, и CSV импортируется без проблем. В коде используется ADOX.Catalog для создания базы данных и OleDb.OleDbConnection с ACE для импорта CSV. Все хорошо, кроме первого раза, когда я открываю БД доступа. Когда я запускаю Access 07 с моего рабочего стола (Office 07), я получаю зеленый индикатор выполнения «ремонта» в правом нижнем углу экрана около 5 секунд. Это происходит только при первом открытии БД. БД и таблицы работают нормально, но Access определенно что-то фиксирует. Я могу воссоздать это поведение каждый раз. Как я могу избежать ремонта при первом открытии базы данных? Любые идеи были бы полезны.Создание Access 07 DB с VB.net всегда запускается Ремонт при открытии его в первый раз
Public Function CreateTaxDatabase(ByVal DatabaseFullPath As String) As Boolean
Dim bAns As Boolean
Dim cat As ADOX.Catalog
Try
'' check if file exists
If System.IO.File.Exists(DatabaseFullPath) Then
'' delete the old file
System.IO.File.Delete(DatabaseFullPath)
End If
Dim sCreateString As String
cat = New ADOX.Catalog()
sCreateString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & DatabaseFullPath
cat.Create(sCreateString)
'' close the connection
Dim connection As ADODB.Connection = DirectCast(cat.ActiveConnection, ADODB.Connection)
connection.Close()
bAns = True
Catch Excep As System.Runtime.InteropServices.COMException
bAns = False
Finally
cat = Nothing
End Try
Return bAns
End Function
Sub ImportCSV(dbPath As String, CSVPath As String, CSVFile as String)
Dim conn As OleDb.OleDbConnection = Nothing
Dim SQL As String = ""
Try
conn = New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + dbPath)
If conn.State = ConnectionState.Closed Then
conn.Open()
End If
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Exclamation + MsgBoxStyle.OkOnly, "Error Connecting to Database")
If conn.State = ConnectionState.Open Then
conn.Close()
End If
Return
End Try
SQL = "SELECT * INTO Table1 FROM [Text;FMT=Delimited;HDR=Yes;CharacterSet=ANSI;DATABASE=" + CSVPath + "].[" + CSVFile + "]"
Try
Dim SQLCmd As OleDb.OleDbCommand = conn.CreateCommand
SQLCmd.CommandText = SQL
SQLCmd.ExecuteNonQuery()
Application.DoEvents()
Catch ex As Exception
SQL = "There was an error executing the following SQL Statement:" + vbCrLf + _
SQL + vbCrLf + "Error - " + Trim(Str(Err.Number)) + " " + Err.Description
MsgBox(SQL, MsgBoxStyle.Exclamation + MsgBoxStyle.OkOnly, "SQL Error")
Finally
If conn.State = ConnectionState.Open Then
conn.Close()
End If
If Not IsNothing(conn) Then
conn = Nothing
End If
End Try
End Sub
Вы, кажется, не создавших 'Table1' при создании базы данных. Возможно, это проблема. Кроме того, вы должны использовать 'conn.Dispose()', когда вы закончите с ним (в * обоих * местах), а не 'conn = Nothing'. –
Таблица 1 создается при выполнении команды SELECT. –
Метод .Dispose() не является членом объекта OleDb.OleDbConnection, который я использую. Может быть, разные версии? –