| Sobald die Daten im DataTable-Objekt geändert wurden, erhält der Datensatz einen Zeilenstatus (RowState). Das ist wichtig für die Aktualisierung der Datenquelle, denn nur so können geänderte Daten erkannt werden. Nachdem die Daten aktualisiert wurden, wird der Zeilenstatus jeder Zeile zurückgesetzt. Wer manuell den Zeilenstatus ändern möchte muss für das Objekt (DataSet, DataTable oder DataRow) die Methode "AcceptChanges" ausführen. Damit die Daten aktualisiert werden können, müssen dem DataAdapter-Objekt die SQL-Befehle zur Manipulation vorliegen (Insert, Update, Delete). Alternativ kann auch ein CommandBuilder die Befehle generieren. Einzige Bedingung hier: Im betroffenden DataTable-Objekt muss ein Primärschlüssel definiert sein (Eigenschaft PrimaryKey). Wichtig: Wenn Sie eine Stored Procedure zur Datenauswahl (Select) verwenden, müssen Sie zunächst die Methode "DeriveParameters" ausführen und das Command-Objekt übergeben. Leider funktioniert "DeriveParameters" bei Microsoft Access nicht. Daher wird in diesem Beispiel der SQLClient verwendet. Imports System
Imports System.Data
Imports System.Data.SqlClient
Public Class Datenbeispiel
Public Sub Main()
Try
Dim sqlCn As New SqlConnection("...")
Dim sqlDa As New SqlDataAdapter("SELECT * FROM mytable;", sqlCn)
Dim Data As New DataTable
Dim newrw As DataRow
sqlDa.Fill(Data)
newrw = Data.NewRow
newrw.Item(0) = 5
Data.Rows.Add(newrw)
Dim sqlbui As New SqlCommandBuilder(sqlDa)
With sqlbui
sqlDa.InsertCommand = sqlbui.GetInsertCommand
sqlDa.DeleteCommand = sqlbui.GetDeleteCommand
sqlDa.UpdateCommand = sqlbui.GetUpdateCommand
End With
sqlDa.Update(Data)
Catch ex As Exception
MessageBox.Show("Fehler!")
End Try
End Sub
End Class Listing 5 |