import af stor txtfil til access
Hej.Jeg håber der er nogen der kan hjælpe mig lidt videre med følgende problem.
Jeg har en ret stor tekstfil som skal importeres ind i en access database. Filen fylder over 4mb og indeholder over 60.000 linjer.
Min kode tager filen ind i en streamreader og "renser" den for ugyldige tegn, hvorefter den opdeles i felt.
Herefter importeres linje for linje ind i access.
Mit problem er at behandlingtiden er alt for lang. Det tager flere minutter at behandle filen. Er der noget man kan gøre for at optimere dette?
Min kode er følgende.
Private Sub importmodtager()
Dim splitstring As Array, dbconnection As OleDbConnection, cmd, cmdusers As OleDbCommand
Dim sqlmodtager, sqlusers, filindhold, filindholdtemp, modtagernummer, modtagernavn, modtageradresse As String
Dim email, password As String
'Åben forbindelsen til databasen
dbconnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & db_path & ";")
dbconnection.Open()
Dim myStreamReader As New StreamReader(modtager_path)
txtboxstatus.AppendText("Import modtagere" & vbLf)
While Not myStreamReader.EndOfStream
filindhold = myStreamReader.ReadLine
filindholdtemp = Replace(filindhold, ";", "") 'fjern alle ;
filindholdtemp = Replace(filindholdtemp, """,""", ";") ' replace alle "," til ;
filindholdtemp = Replace(filindholdtemp, """", "") 'fjern alle "
filindholdtemp = Replace(filindholdtemp, "'", "") 'fjern alle '
splitstring = Split(filindholdtemp, ";") 'del strengen efter hvert semikolon ;
'Tildel felter fra array
modtagernummer = splitstring(0)
modtagernavn = splitstring(1)
modtageradresse = splitstring(2)
'felter til users tabellen
email = splitstring(3)
password = splitstring(4)
'Opdater modtager tabellen
Try
sqlmodtager = "insert into modtagertabel (modtager_nummer,modtager_navn,modtager_adresse) values('" & modtagernummer & "','" & modtagernavn & _
"','" & modtageradresse & "')"
cmd = New OleDbCommand(sqlmodtager, dbconnection)
cmd.ExecuteNonQuery() ' kør jobbet !
txtboxstatus.AppendText(sqlmodtager & vbLf)
'Opdater samtidigt users tabellen
sqlusers = "insert into users (userid,email,password) values('" & modtagernummer & "','" & email & _
"','" & password & "')"
cmdusers = New OleDbCommand(sqlusers, dbconnection)
cmdusers.ExecuteNonQuery() 'kør users jobbet
Catch exception As System.Data.OleDb.OleDbException ' recorden eksisterer i forvejen
' 'update modtagertabellen
Dim sqlupdatemodtager As String
sqlupdatemodtager = "update (modtagertabel) set modtager_nummer='" & modtagernummer & "',modtager_navn='" & modtagernavn & _
"',modtager_adresse='" & modtageradresse & "' Where modtager_nummer='" & modtagernummer & "'"
Dim cmdupdatemodtager As New OleDbCommand(sqlupdatemodtager, dbconnection)
cmdupdatemodtager.ExecuteNonQuery()
'update userstabellen
Dim sqlupdateusers As String
sqlupdateusers = "update (users) set userid='" & modtagernummer & "',email='" & email & "',password='" & password & _
"' Where userid='" & modtagernummer & "'"
Dim cmdupdateusers As New OleDbCommand(sqlupdatemodtager, dbconnection)
cmdupdatemodtager.ExecuteNonQuery()
End Try
End While
'Dim cmdusers As New OleDbCommand(sqlbuild, dbconnection)
txtboxstatus.AppendText("modtagere importeret" & vbLf)
myStreamReader.Close() 'Luk streamreaderen
dbconnection.Close() 'luk forbindelse til databasen
End Sub