.NET Alternative zu ODBC?

  • WPF

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    .NET Alternative zu ODBC?

    Vorab ich arbeite mit VisualStudio 2015/2017 VB.NET, sollte dies der falsche Forum bereich sein sorry :) (neu hier)

    Hallo, ich arbeite an einem programm welches Excel dateien einlesen soll (und noch mehr). Ich möchte über einen FileSelector die Excel Datei auswählen lassen und dann automatisch in ein Datagridview eintragen lassen. Dies Mache ich mit folgendem Code:

    VB.NET-Quellcode

    1. Dim xlApp As Excel.Application
    2. Dim xlWorkBook As Excel.Workbook
    3. Dim xlWorkSheet As Excel.Worksheet
    4. Dim range As Excel.Range
    5. Dim rCnt As Integer
    6. xlApp = New Excel.Application
    7. xlWorkBook = xlApp.Workbooks.Open(path)
    8. xlWorkSheet = xlWorkBook.Worksheets(1)
    9. range = xlWorkSheet.UsedRange
    10. For rCnt = 1 To range.Rows.Count
    11. Dim one As String = ""
    12. Dim two As String = ""
    13. Dim three As String = ""
    14. Try
    15. one = CType(range.Cells(rCnt, 1), Excel.Range).Value.ToString
    16. Catch
    17. End Try
    18. Try
    19. two = CType(range.Cells(rCnt, 2), Excel.Range).Value.ToString
    20. Catch
    21. End Try
    22. Try
    23. three = CType(range.Cells(rCnt, 3), Excel.Range).Value.ToString
    24. Catch
    25. End Try
    26. Next
    27. xlWorkBook.Close()
    28. xlApp.Quit()


    (gekürtzte Version des Codes, es würde nur noch ein invoke zum eintragen der strings in das Datagridview folgen)
    Das Problem ist dass diese Methode wirklich sehr langsam ist. Die Alternative ist dass ich es über den ODBC treiber mache. Dieser ist aber standart mäßig nicht Installiert. Gibt es eine schnellere möglichkeit die ohne ODBC zu realisieren bzw eine portable .dll Version von ODBC o.ä. ?

    Vielen dank im Voraus :P

    EDIT:

    Die antwort von RodFromGermany hat mir geholfen , danke ;D

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „leschi“ ()

    Man kann Excel Dateien auch per SQL auslesen. Gibt nen Connectionstring dafür. Hab hier irgendwo mal nem Snippet für gepostet. Musst mal suchen hier im Forum.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    @leschi Probier mal dies:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub LoadExcelFile(path As String, table As String)
    2. Try
    3. Dim DtSet = New DataSet
    4. Dim connString As String
    5. Dim fi = New IO.FileInfo(path)
    6. Me.Text = fi.Name
    7. If path.ToLower.EndsWith(".xlsx") Then
    8. 'connString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & path & "; Extended Properties=Excel 12.0;"
    9. connString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & path & "; Extended Properties=""Excel 12.0 Xml; HDR=YES; IMEX=1"";"
    10. Else
    11. connString = "provider=Microsoft.Jet.OLEDB.4.0; data source=" & path & "; Extended Properties=Excel 8.0;"
    12. End If
    13. Using myConnection = New OleDb.OleDbConnection(connString)
    14. Dim myCommand As OleDb.OleDbDataAdapter
    15. myCommand = New OleDb.OleDbDataAdapter("select * from [" & table & "$]", myConnection)
    16. myCommand.TableMappings.Add("Table", "TestTable")
    17. myCommand.Fill(DtSet)
    18. Me.DataGridView1.DataSource = DtSet.Tables(0)
    19. myConnection.Close()
    20. End Using
    21. Catch ex As Exception
    22. MessageBox.Show(ex.Message)
    23. End Try
    24. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    leschi schrieb:

    Gibt es eine schnellere möglichkeit die ohne ODBC zu realisieren
    Es gibt ganz gute Bibliotheken, die Excel-Files lesen und schreiben können.
    Bisserl googel, oder auf codeProject.
    Die Libs sind wesentlich schneller, und v.a. verändern die nicht die Daten, wie sie wollen.

    (Aber ws hat das mit WPF zu tun?)