boesi666
Goto Top

VB.NET 2 Tabellen aus Dataset an Datenbank Updaten

Hallo zusammen,
als endlich VB6 zu VB.Net Umsteiger versuche ich beim Thema Datenbank Anbindung nun meine Grundlagen zu schaffen. Ich teste mit einer MSSQL Datenbank und habe 2 Tabellen:

Products [ID,Name,ArtikelNr]
ProductsDetails [ProductsID, Infotext,usw.]

Auf einer Form habe ich 2 Grids, welche die Daten anzeigen sollen und beim ändern innerhalb des Grids die Daten anschließend speichern sollen. Nach vielen Googlen und probieren de verschiedenen Möglichkeiten habe ich das mit dem Anzeigen bisher so gemacht:


   Dim connectionString As String
    Dim MAINTABLE As String = "Products" ' / Costumers  
    Dim sqlstr_SEARCH_filter1 As String = " WHERE ID > 0 "  

    Dim DetailsTable As String = "Details"  

    Dim sqlstr_Master As String = ""  
    Dim sqlstr_Details1 As String = ""  
    Dim DS As New DataSet

    Private WithEvents masterBindingSource As New BindingSource
    Private Details1BindingSource As New BindingSource()


  Public Sub load_data()
        sqlstr_Master = "select * from " & MAINTABLE & sqlstr_SEARCH_filter1  
        sqlstr_Details1 = "select * from " & MAINTABLE & DetailsTable '& sqlstr_SEARCH_filter1  

        GetSQLDBConect() ' return SQLconn and SQLConnStr  
        connectionString = SQLConnStr
        Dim myAdapter_Master As New SqlDataAdapter(sqlstr_Master, connectionString)
        Dim myAdapmyAdapter_Details1 As New SqlDataAdapter(sqlstr_Details1, connectionString)


        DS.Clear()
        ' DS.Reset()  
        DS.Relations.Clear()
        'myAdapter_Master.FillSchema(DS, SchemaType.Source, MAINTABLE)  
        myAdapter_Master.Fill(DS)


        myAdapmyAdapter_Details1.Fill(DS)
        ' *** Primärschlüssel-Informationen beim Fill mit übernehmen  
        myAdapter_Master.MissingSchemaAction = MissingSchemaAction.AddWithKey
        myAdapmyAdapter_Details1.MissingSchemaAction = MissingSchemaAction.AddWithKey

        myAdapter_Master.Fill(DS, MAINTABLE)
        myAdapmyAdapter_Details1.Fill(DS, MAINTABLE & DetailsTable)

        masterBindingSource.DataSource = DS
        masterBindingSource.DataMember = MAINTABLE

        Try

            ' Establish a relationship between the two tables.  
            Dim relationDetails1 As New DataRelation(MAINTABLE & DetailsTable, _
                DS.Tables(MAINTABLE).Columns("ID"), _  
                DS.Tables(MAINTABLE & DetailsTable).Columns("Product_ID"), False)  
            DS.Relations.Add(relationDetails1)

            Details1BindingSource.DataSource = masterBindingSource
            Details1BindingSource.DataMember = MAINTABLE & DetailsTable


        Catch ex As Exception
            'error: Diese Einschränkung kann nicht aktiviert werden, da nicht alle Werte entsprechende übergeordnete Werte besitzen.  
            '' Grund: Das Problem das bestand war das in den Detaildatensätze Einträge vorhanden waren, die nicht als Hauptdatensätze exsistierten. Und so verwaiste Dateien existieren würden.  
        End Try

        'Bind Controls to BindingSources:  

        'Master view:  
        GridControl_MasterView.DataSource = masterBindingSource
        'GridView1.OptionsView.RowAutoHeight = True  
        CardViewMasterview.OptionsBehavior.FieldAutoHeight = True ' for displaying images in view  

        'Details view  
        DataGridView1.DataSource = Details1BindingSource

Ich hab die Verknüpfung der beiden Tabellen mit DataRelation gemacht, da ich dachte, dass diese Variante professioneller ist, als beim klick auf Zeile von Tabelle1 die Datensatz ID der Zeile zu ermitteln und zeitglich die Daten für die Detailansicht in einer zweiten Abfrage durchzuführen?!?!

Mein Problem ist nun dass Updaten der Daten zurück in die BEIDEN Tebellen der Datenbank nach dem manuellen Editieren in den Tabellen.
Das Updaten in eine Tabelle klappt eigentlich ganz gut, aber in beide das klappt nicht, da beim update nach der ersten Tabelle die geänderten Daten aus dem zweiten grid wieder zurück gesetzt werden. Das muss irgendwie mit der Datenrelation zu tun haben.


Private Sub BarButtonItem_save_record_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItem_save_record.ItemClick
        'save masterview:  
        Dataset_save_toSQLDB(DS, MAINTABLE, sqlstr_Master, connectionString)

        'save current detail view:  
        Dataset_save_toSQLDB(DS, MAINTABLE & DetailsTable, "select * from " & MAINTABLE & DetailsTable, connectionString) 'sqlstr_Details1  

        'load_data() ' reload data in grids  
    End Sub

Public Function Dataset_save_toSQLDB(ByVal DS As DataSet, ByVal targetTable As String, ByVal Savesqlstr As String, ByVal connectionString As String) As Boolean
        'änderungen in die DB speichern  
        Try

            Dim myAdapter As New SqlDataAdapter(Savesqlstr, connectionString)
            Dim cb As New SqlCommandBuilder(myAdapter)
            myAdapter.Update(DS, targetTable)
            Return True
        Catch ex As Exception
            MsgBox(ex.ToString())
            Return False
        End Try
    End Function

Könnt Ihr mir einen sauberen Weg geben wie ich den Inhalt beider angezeigten Tabellen sauber in die DB zurück schreiben kann?

Content-ID: 276369

Url: https://administrator.de/contentid/276369

Ausgedruckt am: 23.11.2024 um 01:11 Uhr

boesi666
boesi666 03.07.2015 um 22:18:40 Uhr
Goto Top
hat keiner eine idee oder erfahrungen damit oder könnte mich ein wenig in die richtige Richtung bringen?