Hallo liebe Leute,
ich hoffe ihr könnt mir helfen
Zur Zeit arbeite ich an einem kleinen Testprogramm indem ich Datenbankeinträge lesen, schreiben und einfügen möchte.
Beim laden der WPF-Form wird das vorhandene DataGrid mit den Datenbankeinträgen gefüllt.
Hier der XAML Code:
Member Variablen der Klasse "Mitarbeiter"
Den Connectionstring ziehe ich aus der App.Config
Konstruktore der Form:
Bis dahin funktioniert auch alles top:-)
Nun soll der User neue Zeilen einfügen löschen und editieren können.
Wenn das Event Window_Closing eintrifft, updatet er mir die Tabelle - das funktioniert auch (wenn ich bestehende Datensätze bearbeite z.B. Vorname)
Nun da ist auch das Problem. Habe ich neue Zeilen oder lösche ich welche - wirft er mir eine exception. Es wird ja auch kein DELETE oder INSERT Befehl ausgeführt und wie unterscheide ich die Fälle?
Mit einem Button versuche ich eine neue Zeile eine ID zu zuweisen.
Hoffe ihr könnt mir helfen
ich hoffe ihr könnt mir helfen
Zur Zeit arbeite ich an einem kleinen Testprogramm indem ich Datenbankeinträge lesen, schreiben und einfügen möchte.
Beim laden der WPF-Form wird das vorhandene DataGrid mit den Datenbankeinträgen gefüllt.
Hier der XAML Code:
XML-Quellcode
- <DataGrid x:Name="mitarbeiterGrid" ItemsSource="{Binding}" AutoGenerateColumns="False" Width=" Auto" >
- <DataGrid.Columns>
- <DataGridTextColumn IsReadOnly="True" Header="ID" Width="50" Binding="{Binding Path=Id}"> </DataGridTextColumn>
- <DataGridTextColumn Header="Vorname" Width="125" Binding="{Binding Path=Vorname}" ></DataGridTextColumn>
- <DataGridTextColumn Header="Nachname" Width="125" Binding="{Binding Path=Nachname}"></DataGridTextColumn>
- </DataGrid.Columns>
- </DataGrid>
Member Variablen der Klasse "Mitarbeiter"
VB.NET-Quellcode
- Dim da As OleDb.OleDbDataAdapter
- Dim dt As New DataTable()
- 'Connection String aus der app.config auslesen. So lässt sich das individuell anpassen
- Dim _connectionString As String = ConfigurationManager.ConnectionStrings("database").ConnectionString
- 'Verbindungsaufbau
- Dim _sqlConnection As New SqlConnection(_connectionString)
- 'SQL-Befehel
- Dim _queryCMD = "SELECT * FROM Mitarbeiter"
- Dim sqlAdapter As SqlDataAdapter = New SqlDataAdapter(_queryCMD, _sqlConnection)
Den Connectionstring ziehe ich aus der App.Config
Konstruktore der Form:
VB.NET-Quellcode
Bis dahin funktioniert auch alles top:-)
Nun soll der User neue Zeilen einfügen löschen und editieren können.
Wenn das Event Window_Closing eintrifft, updatet er mir die Tabelle - das funktioniert auch (wenn ich bestehende Datensätze bearbeite z.B. Vorname)
VB.NET-Quellcode
- Private Sub Window_Closing(sender As Object, e As ComponentModel.CancelEventArgs)
- 'Update Command
- 'Update Commnand mit Variablen bestücken
- Dim upd As String = "Update Mitarbeiter SET Vorname = @vorname, Nachname = @nachname WHERE id = @id"
- 'SqlCommand generieren
- Dim cmd As New SqlCommand(upd, _sqlConnection)
- 'Parameter hinzufügen, vor und nachname
- cmd.Parameters.Add("@vorname", SqlDbType.VarChar, 25, "vorname")
- cmd.Parameters.Add("@nachname", SqlDbType.VarChar, 25, "nachname")
- 'Id bleibt im Originalen ja immer gleich. Hier wird nur verglichen
- Dim parm As SqlParameter = cmd.Parameters.Add("@id", SqlDbType.Int, 4, "id")
- '... Original
- parm.SourceVersion = DataRowVersion.Original
- 'dem SqlDapter den ganzen Befehl zuweisen
- sqlAdapter.UpdateCommand = cmd
- 'Update durchführen
- sqlAdapter.Update(dt)
- _sqlConnection.Close()
- End Sub
Nun da ist auch das Problem. Habe ich neue Zeilen oder lösche ich welche - wirft er mir eine exception. Es wird ja auch kein DELETE oder INSERT Befehl ausgeführt und wie unterscheide ich die Fälle?
Mit einem Button versuche ich eine neue Zeile eine ID zu zuweisen.
VB.NET-Quellcode
- Private Sub Button_Click(sender As Object, e As RoutedEventArgs)
- Dim currentID As String = ""
- For Each row As DataRow In dt.Rows
- For Each column As DataColumn In dt.Columns
- If Not (row.IsNull(column)) Then
- currentID = row(column)
- 'Ab hier wissen wir ob es ne id gibt oder nicht
- Else
- 'Autoincrement wäre hier schön
- 'row(column) = currentID + 1
- MessageBox.Show(currentID + 1)
- End If
- Next
- Next
- End Sub
Hoffe ihr könnt mir helfen