warum baut mein mysqlCommandBuilder keine Update-Kommandos ?

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von raist10.

    warum baut mein mysqlCommandBuilder keine Update-Kommandos ?

    Ich möchte die Statemants für das Aktualisieren automatisch über den
    mysqlCommandBuilder erzeugen lassen.

    Klappt nur nicht und ich weiss nicht, warum ?
    Hat jemand eine Idee, was noch fehlt ?

    VB.NET-Quellcode

    1. Public Function TableRead(CommandText As String, Tablename As String, ByRef Data As System.Data.DataSet) As Int32
    2. Dim Command As New MySqlCommand
    3. Dim CommandBuilder As New MySqlCommandBuilder
    4. Dim DataAdapter As New MySqlDataAdapter
    5. ' Sql-Kommando vorbereiten
    6. Command.CommandText = "select * from tbVarianten" ' zur Veranschaulichung, wäre eigentlich 'CommandText'
    7. Command.Connection = m_Connection
    8. ' Datenadapter und Stringbuilder (für Änderungen an den Tabellen) vorbereiten
    9. CommandBuilder.DataAdapter = DataAdapter
    10. DataAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey
    11. DataAdapter.SelectCommand = Command
    12. ' Daten lesen und Tabelle füllen
    13. DataAdapter.Fill(Data, TableName)


    Objektdaten :
    Spoiler anzeigen

    VB.NET-Quellcode

    1. {MySql.Data.MySqlClient.MySqlCommandBuilder}
    2. CatalogLocation: Start {1}
    3. CatalogSeparator: "."
    4. ConflictOption: CompareAllSearchableValues {1}
    5. Container: Nothing
    6. DataAdapter: {MySql.Data.MySqlClient.MySqlDataAdapter}
    7. QuotePrefix: "`"
    8. QuoteSuffix: "`"
    9. SchemaSeparator: "."
    10. SetAllValues: False
    11. Site: Nothing

    VB.NET-Quellcode

    1. {MySql.Data.MySqlClient.MySqlDataAdapter}
    2. AcceptChangesDuringFill: True
    3. AcceptChangesDuringUpdate: True
    4. Container: Nothing
    5. ContinueUpdateOnError: False
    6. DefaultSourceTableName: "Table"
    7. DeleteCommand: Nothing
    8. FillLoadOption: OverwriteChanges {1}
    9. InsertCommand: Nothing
    10. MissingMappingAction: Passthrough {1}
    11. MissingSchemaAction: AddWithKey {4}
    12. ReturnProviderSpecificTypes: False
    13. SelectCommand: {MySql.Data.MySqlClient.MySqlCommand}
    14. Site: Nothing
    15. TableMappings: {System.Data.Common.DataTableMappingCollection}
    16. UpdateBatchSize: 1
    17. UpdateCommand: Nothing

    Guck Dir den Code mal an, den habe ich aus dem MySQL-Handbuch (guckst Du hier: dev.mysql.com/tech-resources/a…ata-using-vbnet-2005.html). Vielleicht hilft der Dir ja weiter:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Overloads Sub DataLoadingSearching(ByRef pDataGridViewControl As DataGridView, _
    2. ByRef pRecordCountInt32 As Int32, _
    3. ByRef pErrorMessageString As String)
    4. Try
    5. Using mMySqlConnection As New MySqlConnection(mMySQLConnectionString)
    6. mMySqlConnection.Open()
    7. Using mMySqlCommand As New MySqlCommand
    8. With mMySqlCommand
    9. .Connection = mMySqlConnection
    10. .CommandType = CommandType.StoredProcedure
    11. .CommandText = "usp_select_all_data"
    12. End With
    13. Using mMySqlDataAdapter As New MySqlDataAdapter(mMySqlCommand)
    14. Using mDataSet As New DataSet
    15. mDataSet.Clear()
    16. mMySqlDataAdapter.Fill(mDataSet, "data")
    17. mDataView = New DataView
    18. mDataView.Table = mDataSet.Tables("data")
    19. pRecordCountInt32 = mDataView.Count
    20. End Using
    21. End Using
    22. End Using
    23. End Using
    24. Call DataGridViewFormat(pDataGridViewControl)
    25. With pDataGridViewControl
    26. .DataSource = mDataView
    27. .AutoResizeRows()
    28. End With
    29. Catch exError As Exception
    30. pErrorMessageString = exError.Message
    31. End Try
    32. End Sub


    Gruß

    Rainer

    Duke schrieb:

    Nein, hilft leider nicht.

    Die Beispiele sind nicht zum Ändern von Daten, sondern nur zum Einlesen,

    Trotzdem Danke.


    Öhem ... wenn Du nur Daten ändern willst, was sucht dann der DataTableAdapter in Deinem Code? o_O

    Zum ändern gehst Du doch normal so vor: Command-Object mit Command-String und Connection bestücken und danach Command.Execute oder Command.ExecuteNonQuery ausführen und damit wird das SQL-Statement in die DB geschrieben.

    Allerdings ist dafür der Command-String den Du übergibst völlig ungeeignet da Du nur eine SELECT-Abfrage machst. Ein SQL-Statement das Daten ändert fängt immer mit UPDATE an.

    In dem Sinne verstehe ich jetzt Deinen Code überhaupt nicht mehr ... egal wie, wenn Du damit Daten ändern willst kann das schonmal überhaupt nicht gehen so.

    Gruß

    Rainer
    ;)

    Man kann (in Verbindung mit dem mysqlCommandBuilder)
    für SingleTable-Selects automatisch die dazugehörigen
    Update-Kommandos (insert, update und delete) generieren lassen.

    Die Operationen, die man auf dem DataTable-Objekt durchführt,
    werden dann bei einem DataAdapter.Update() in die Datenbank
    übernommen, obwohl man nur das select-Statement angegeben hat.

    Deswegen "nur" ein select aber trotzdem DataAdapter.


    Klappt jetzt übrigens auch.
    Beim Update hatte ich vergessen, den Tabellennamen mit anzugeben :
    geht nicht:

    VB.NET-Quellcode

    1. DataAdapter.Update(Data)

    geht :

    VB.NET-Quellcode

    1. DataAdapter.Update(Data, TableName)


    Ich habe mich davon irritieren lassen, dass die
    entsprecheden Propertys (InsertCommand etc..)
    nicht gefüllt waren. Aber die automatisch generierten
    Updatekommandos werden tatsächlich gar nicht angezeigt. Die Propertys
    sind für optionale besondere Änderungskommandos, die man
    dann selber spezifizieren kann. Diese haben dann, wenn sie
    angegeben sind, Vorrang vor den automatisch generierten Statements.

    Gruß, Duke