Ich schreibe ein Programm, das Millionen von Datensätzen in csv in kurzer Zeit handhaben sollte, meine Idee war, odbc wegen der Leistungsgründe zu verwenden, deshalb lese ich alle Daten mit odbc und speichern sie im Speicher, i danach Parameter hinzufügen und legen sie sie in sQL-Datenbank, hier ist mein Code so weit:odbc reader für csv in vb.net
Using connection As New OdbcConnection("jdbc:odbc:Driver={Microsoft Text Driver (*.txt; *.csv)};" & filePath & "Extensions=csv;Persist Security Info=False;")
Dim reader As OdbcDataReader
Dim i As Integer
Dim r As SeekZeilen
Dim TextFileTable As DataTable = Nothing
Dim line As String = reader.Read()
Me.ParseString(line)
Dim memStream As New MemoryStream(Encoding.Default.GetBytes(line))
Using TextFileReader As New Microsoft.VisualBasic.FileIO.TextFieldParser(memStream)
TextFileReader.TextFieldType = FileIO.FieldType.Delimited
TextFileReader.SetDelimiters(";")
r.erste_Zeile = TextFileReader.ReadFields()
If TextFileTable Is Nothing Then
TextFileTable = New DataTable("TextFileTable")
For i = 0 To r.erste_Zeile.Length - 1
Dim Column As New DataColumn(r.erste_Zeile(i))
Column.ReadOnly = True
TextFileTable.Columns.Add(Column)
Next
End If
DataGridView1.DataSource = TextFileTable
End Using
While reader.HasRows
line = reader.Read()
Me.ParseString(line)
memStream = New MemoryStream(Encoding.Default.GetBytes(line))
Using TextFileReader As New Microsoft.VisualBasic.FileIO.TextFieldParser(memStream)
TextFileReader.TextFieldType = FileIO.FieldType.Delimited
TextFileReader.SetDelimiters(";")
DataGridView1.DataSource = TextFileTable
Try
r._Rest = TextFileReader.ReadFields()
ReplaceChars(r._Rest)
If Not r._Rest Is Nothing Then
Dim oSQL As New DBUmgebung.cdb.SQL()
oSQL.init()
AddParameters(oSQL, r)
oSQL.ausfuehrenSQL(DBUmgebung.cdb.KSQLCommand.INSERT, _table, "")
Dim dtRow As DataRow = TextFileTable.NewRow
For i = 0 To r._Rest.Length - 1
dtRow(i) = r._Rest(i).ToString()
Next
TextFileTable.Rows.Add(dtRow)
DataGridView1.Refresh()
Application.DoEvents()
End If
Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineException
MsgBox("Error! " & ex.Message & _
"")
Catch sqlEx As SqlException
MessageBox.Show(sqlEx.Message)
rtbSql.Focus()
Exit For
Catch ex As Exception
MessageBox.Show(ex.Message)
rtbSql.Focus()
Exit For
End Try
End Using
End While
reader.Close()
End Using
das Problem ist, dass ich null-Zeiger-Ausnahme für einen unbekannten Grund zu bekommen, hat jemand Ahnung, was ich falsch gemacht? liegt es wahrscheinlich daran, dass mein odbc reader nicht richtig initialisiert ist?
Ich erinnere mich, einmal in so etwas zu laufen. Von was ich recherchiert habe und OleDbConnection getan habe, liest man die Excel-Datei als Text ein, ansonsten könnte man auf das eben beschriebene Problem stoßen. – codeMonger123
Ich habe versucht, das zu beheben, indem ich Odbccommand 'Dim Cmd As New OdbcCommand' initialisiere und 'reader = cmd.ExecuteReader()' ausführe und jetzt bekomme ich eine ungültige Operation exception – Sparkm4n