Announcement

Collapse
No announcement yet.

INSERT INTO Tabelle

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • INSERT INTO Tabelle

    Hi,

    ich beschäftige mich erst seit kurzem mit vb.net und habe folgendes Problem:
    Aus einer Datanbank im Netzwerk lese ich Daten aus und füge sie einem Dataset hinzu. Nun will ich dieses Dataset in eine lokale SqlExpress Datenbank Tabelle übertragen - einfach hinzufügen, kein update. Der Aufbau des Datasets entspricht dem der Zieltabelle.

    Code:
    sub updateLocalDB()
           Dim newRow As DataRow
    
            newRow = DsOrganisation.tb_Organisation.NewRow()
            newRow("OrganisationID") = ds.Tables(0).Rows(0).Item(0).ToString
            newRow("OrganisationName") = ds.Tables(0).Rows(0).Item(1).ToString
            newRow("KundenNr") = ds.Tables(0).Rows(0).Item(2).ToString
    
            DsOrganisation.tb_Organisation.Rows.Add(newRow)
        End Sub

  • #2
    An was scheitert es denn? Besteht bereits eine Verbindung zur lokalen SqlExpress Datenbank? Warum erstellst du dafür nicht auch einen TableAdapter und führst ein Update aus? Davor natürlich alle RowStates im Dataset auf Added setzen und schon sollte es funktionieren?!
    Unsere Jugend ist unerträglich, unverantwortlich und entsetzlich anzusehen! - Aristoteles

    Comment


    • #3
      Ok,

      die SQL - Datenbank, den DataAdapter (Tb_OrganisationTableAdapter) und das Dataset (DsOrganisation) habe ich mithilfe der Assistenten von Visual Studio 2005 erstellt.

      Beim Start der Anwendung wird nun dieses Dataset in einen TableAdapter geladen und dann in einem dgv angezeigt (siehe Code). In der Sub getData() greife ich auf die Netzwerkdatenbank zu und hole mir die benötigten Daten. Ich lade und zeige sie an. Anschließend füge ich in der Sub updateLocalDB() dem Dataset DsOrganisation eine neue Zeile mit Daten hinzu. Diese wird mir im dgv angezeigt. Nur speichern in der Datenbank kann ich sie nicht.

      Code:
      Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
              'lädt Daten in die Tabelle "DsOrganisation.tb_Organisation"
              Me.Tb_OrganisationTableAdapter.Fill(Me.DsOrganisation.tb_Organisation)
      
              getData()
              updateLocalDB()
      End Sub
      Ich habe schon verschiedenes ohne Erfolg ausprobiert, z.B.:
      Code:
      Sub updateLocalDB()
              Dim newRow As DataRow
      
              newRow = DsOrganisation.tb_Organisation.NewRow()
              newRow("OrganisationID") = ds.Tables(0).Rows(0).Item(0).ToString
              newRow("OrganisationName") = ds.Tables(0).Rows(0).Item(1).ToString
              newRow("KundenNr") = ds.Tables(0).Rows(0).Item(2).ToString
      
              DsOrganisation.tb_Organisation.Rows.Add(newRow)
              DsOrganisation.AcceptChanges()
      
              Try
                  'Me.Validate()
                  'Me.Tb_OrganisationBindingSource.EndEdit()       
                  Tb_OrganisationTableAdapter.Update(DsOrganisation.tb_Organisation)
                  MsgBox("Update successful")
              Catch ex As Exception
                  MsgBox("Update failed")
              End Try
      End Sub
      oder muss ich von Hand eine Verbindung aufbauen einen Insert into - SQL Befehle erstellen?

      Comment


      • #4
        nimm mal das DsOrganisation.AcceptChanges() da raus. Dann könnte es klappen.

        AcceptChanges macht nix anderes, als deinem DataSet zu sagen, das es die Änderungen als Erledigt ansehen soll. D.h. nach dem Befehl hat dein DataSet keine Änderungen mehr, die es mit einem Update an die Datenbank schicken könnte. (Wenn ich das jetzt falsch im Kopf habe, möge man mich verbessern )

        Comment


        • #5
          nein Andreas genau richtig. Das AcceptChanges verhindert hier ein absetzen der Befehle an die Datenbank. DA wie du richtig sagst alle Änderungen akzeptiert wurden. Geht der TableAdapter davon aus dass die Datenbank und das Dataset bereits auf dem richtigen Stand sind und keine einzutragenden Änderungen mehr vorhanden sind.
          Unsere Jugend ist unerträglich, unverantwortlich und entsetzlich anzusehen! - Aristoteles

          Comment


          • #6
            Mein Ziel ist es, die Datenzeile, welche ich mit Add(newRow)hinzufüge in meine Datenbank zu übernehmen. Also habe ich die Zeile DsOrganisation.AcceptChanges() nun entfernt. Dies hat allerdings keinerlei Auswirkungen auf das Ergebnis!

            Kennt Ihr vielleicht ein ausführliches Beispiel / Erklärung?

            Comment


            • #7
              Schau dir das mal an, vielleicht hilft das, deinem Problem auf die Spur zu kommen:

              [highlight=vb.net]
              Public Function CreateCommandAndUpdate( _
              ByVal connectionString As String, _
              ByVal queryString As String) As DataSet

              Dim dataSet As DataSet = New DataSet

              Using connection As New OleDbConnection(connectionString)
              connection.Open()
              Dim dataAdapter As New OleDbDataAdapter()

              dataAdapter.SelectCommand = New OleDbCommand( _
              queryString, connection)

              Dim commandBuilder As OleDbCommandBuilder = _
              New OleDbCommandBuilder(dataAdapter)

              dataAdapter.Fill(dataSet)

              ' Code to modify the data in the DataSet here.

              ' Without the OleDbCommandBuilder this line would fail.
              dataAdapter.Update(dataSet)
              End Using
              CreateCommandAndUpdate = dataSet
              End Function
              [/highlight]

              Comment


              • #8
                hast du für deinen TableAdapter auch Insert- Delete- und Update Befehle mitgenerieren lassen als du ihn mit dem Designer erstellt hast?
                Unsere Jugend ist unerträglich, unverantwortlich und entsetzlich anzusehen! - Aristoteles

                Comment


                • #9
                  Hallo zusammen,

                  leider muss ich dieses Projekt fürs Erste auf Eis legen, da aktuell wichtigeres ansteht.

                  Danke für Eure Hilfe und das Beispiel!

                  Schönes Wochenende
                  Avallyn

                  Comment

                  Working...
                  X