.mdb einlesen, Tabelle 1zu1 auf SQL Server kopieren.

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Amro.

    .mdb einlesen, Tabelle 1zu1 auf SQL Server kopieren.

    Guten Tag allerseits,

    Hab mit nem neuem Projekt angefangen, Windows Form Projekt, hab 3 Buttons erstellt, "Lese MDB" , "Verbinde mit SQL Datenbank" (SQL Server 2008) , "UPDATE Database"

    Der Lese MDB button besitzt folgenden Code

    VB.NET-Quellcode

    1. Private Sub btn_lesemdb_Click(sender As System.Object, e As System.EventArgs) Handles btn_lesemdb.Click
    2. Dim DS As System.Data.DataSet
    3. Dim MyCommand As System.Data.OleDb.OleDbDataAdapter
    4. Dim MyConnection As System.Data.OleDb.OleDbConnection
    5. MyConnection = New System.Data.OleDb.OleDbConnection( _
    6. "provider=Microsoft.Jet.OLEDB.4.0; " & _
    7. "data source=C:\GM_SQL.mdb")
    8. MyCommand = New System.Data.OleDb.OleDbDataAdapter( _
    9. "select * from Categories", MyConnection)
    10. DS = New System.Data.DataSet()
    11. MyCommand.Fill(DS)
    12. MyConnection.Close()
    13. End Sub


    Jetzt bin ich an den Punkt gekommen wo ich die .MDB eingelesen habe, aber was nun? Hab ne denk Blocklade.. In der .mdb gibts 10 Spalten die möcht ich über den Update Button 1zu1 mit nem Update Befehl in den SQL Server übertragen, aber ich komm grad nich weiter beim proggen. (Den Connection String setz ich unten noch)

    Mein Button Verbinde SQL:

    VB.NET-Quellcode

    1. Public Class CCEUpdater
    2. Dim connectionString As String
    3. Dim connection As SqlConnection
    4. Dim adapter As SqlDataAdapter
    5. Dim cmdBuilder As SqlCommandBuilder
    6. Dim ds As New DataSet
    7. Dim changes As DataSet
    8. Dim sql As String
    9. Dim i As Int32
    10. Private Sub Btn_Verbinde_Click(sender As System.Object, e As System.EventArgs) Handles btn_verbinde.Click
    11. connectionString = ""
    12. connection = New SqlConnection(connectionString)
    13. sql = "select * from Spalte"
    14. Try
    15. connection.Open()
    16. Status.Text = "Okay"
    17. adapter = New SqlDataAdapter(sql, connection)
    18. adapter.Fill(ds)
    19. Status.Text = "Verbindung wurde geschlossen"
    20. 'DataGridView1.DataSource = ds.Tables(0)
    21. Catch ex As Exception
    22. MsgBox(ex.ToString)
    23. Status.Text = "Failed"
    24. Finally
    25. connection.Close()
    26. End Try


    *Topic verschoben*

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Hey mrTru,
    ich kanns leider nicht ausprobieren, weil ich deine .mdb ned hab, aber versuch mal das, vielleicht geht's ;)

    VB.NET-Quellcode

    1. Imports System.Text
    2. Imports System.Data
    3. Imports System.Data.OleDb
    4. Imports System.Data.SqlClient
    5. Public Class CCEUpdater
    6. Dim Dt As DataTable
    7. Dim MyCommand As OleDbDataAdapter
    8. Dim MyConnection As OleDbConnection
    9. Dim tablename As String = "TABELLENNAME IN SQL"
    10. Dim sqlcmd As New StringBuilder
    11. Private Sub btn_lesemdb_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_lesemdb.Click
    12. 'Zuerst den Inhalt der DataTable wieder löschen
    13. Dt = New DataTable
    14. 'Verbindung erstellen, aufbauen, SELECT * FROM Command ausführen und das Ergebnis in die DataTable 'einspeisen'
    15. MyConnection = New OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0; data source=C:\GM_SQL.mdb")
    16. MyCommand = New System.Data.OleDb.OleDbDataAdapter("SELECT * FROM `Categories`", MyConnection)
    17. MyConnection.Open()
    18. MyCommand.Fill(Dt)
    19. MyConnection.Close()
    20. 'Für jede Zeile in Dt eine Zeile beim sqlcmd einfügen mit "INSERT INTO `TABELLENNAME IN SQL` VALUES('item(0)', 'item(1)', '[...]');"
    21. For Each r As DataRow In Dt.Rows
    22. sqlcmd.Append("INSERT INTO `" & tablename & "` VALUES(")
    23. For c = 0 To Dt.Columns.Count - 1
    24. sqlcmd.Append("'" & r.Item(c) & "', ")
    25. Next c
    26. sqlcmd.ToString.Remove(sqlcmd.Length - 2, 2)
    27. sqlcmd.Append(");" & vbNewLine)
    28. Next r
    29. End Sub
    30. Private Sub Btn_Verbinde_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_verbinde.Click
    31. 'Deine SQL-Connection und dein SQL-Command definieren, bzw. 'einen Wert geben'
    32. Dim connection As New SqlConnection("Server='localhost';Uid='deinusername';Pwd='deinpasswort';Port=3306;")
    33. Dim command As New SqlCommand(sqlcmd.ToString, connection)
    34. Try
    35. 'Deine SQL-Connection öffnen, dein SQL-Command ausführen und die SQL-Connection wieder schließen, fertig.
    36. connection.Open()
    37. Status.Text = "Okay"
    38. command.ExecuteNonQuery()
    39. Status.Text = "Verbindung wurde geschlossen"
    40. Catch ex As Exception
    41. MsgBox(ex.Message, MsgBoxStyle.Critical)
    42. Status.Text = "Failed"
    43. Finally
    44. connection.Close()
    45. End Try
    46. End Sub
    47. End Class


    PS: Es gibt bestimmt eine einfachere Methode, mit der man den ganzen Query generieren
    und ausführen lassen kann, aber ich hab da grad ein bisschen herumgesucht und nichts gefunden..
    LG
    Merio

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

    setze bei deim OledBDataAdapter AcceptChangesDuringFill auf False

    Bastel genau den gleichen Adapter als SqlDataAdapter (natürich mit Connection auf die Sql-DB).
    Erstell einen CommandBuilder dazu.
    Nun kannst du SqlDataAdapter.Update(ds) aufrufen, und er schreibt die Daten in die Sql-DB.

    ErfinderDesRades schrieb:

    setze bei deim OledBDataAdapter AcceptChangesDuringFill auf False

    Bastel genau den gleichen Adapter als SqlDataAdapter (natürich mit Connection auf die Sql-DB).
    Erstell einen CommandBuilder dazu.
    Nun kannst du SqlDataAdapter.Update(ds) aufrufen, und er schreibt die Daten in die Sql-DB.


    Hatte ja gesagt man kann es sich bestimmt auch einfacher generieren lassen ;)
    LG
    Merio

    VB.NET-Quellcode

    1. Private Sub btAccess2SqlServer(ByVal sender As Object, ByVal e As EventArgs)
    2. Dim sConOle = "AccessDBConnectionBlabla"
    3. Dim sConSqlSrv = "SqlServerConnectionBlabla"
    4. Dim sql = "select * from Spalte"
    5. Dim adpOle = New OleDbDataAdapter(sql, sConOle)
    6. Dim adpSqlSrv = New SqlDataAdapter(sql, sConOle)
    7. Dim cbOle = New OleDbCommandBuilder(adpOle)
    8. Dim cbSqlSrv = New SqlCommandBuilder(adpSqlSrv)
    9. Dim ds = New DataSet
    10. adpOle.AcceptChangesDuringFill = False
    11. adpOle.Fill(ds)
    12. adpSqlSrv.Update(ds.Tables(0))
    13. End Sub


    Ungetestet, logischerweise.
    @EDR:
    Das funktioniert doch nur, wenn auch in der SQL-Datenbank eine Tabelle gleicher Struktur bereits vorhanden ist, oder hab' ich was übersehen? Gibt's auch 'ne Möglichkeit, die Tabellenstruktur zu übernehmen?