Aus Datagridview Daten aktualisieren und in Tabelle zurückspeichern, findet aber die Tabelle nicht?
Hallo ihr Lieben!
Ich bin zur Zeit Anfänger, und versuche mich an einem kleinen Projekt, nur leider scheitere ich schon am anfang.
Ich verwende einen SQL Server 2005 und die VBNet 2008 Umgebung.
Ich habe 2 Tabellen einmal für die Spieler und für Vereine, beide sind mittels Inner Join verknüpft (Primär und Foreign Key gesetzt).
In meiner WIndowsForm soll über eine ComboBox die Vereinsnamen aufgelistet werden, was ich mittels DataReader umgesetzt habe, wenn der Benutzer über die Combox einen Verein auswählt, dann erscheint in der Datagridview die Spieler, die zu dem Verein gehören. Klappt alles wunderbar.
Nun möchte ich aber dem Benutzer die Möglichkeit geben, Daten zu ändern bzw. zu löschen. Der Löschvorgang im Datagridview funktioniert zwar, aber die darauffolgende Aktualiserung auf die Tabelle klappt nicht, da die Tabelle nicht gefunden wird.. obwohl alles deklariert wurde...
Aktualisieren: TableMapping['tbl_spielerdaten'] oder DataTable 'tbl_spielerdaten' kann nicht gefunden werden ???
Ich habe mal den gesamt Quellcode reingesetzt in der Hoffnung, dass mir jemand den Fehler wiedergeben kann, würde mich freuen!
I. Combobox-Spalte füllen mit DataReader
Private Sub ReadData_SQLServer()
'1.Verbindung
Dim Cn_sql As New SqlConnection
Dim ConnBuilder As SqlConnectionStringBuilder = New SqlConnectionStringBuilder()
With ConnBuilder
.DataSource = "xxxx"
.InitialCatalog = "mog_sportverwaltung"
.UserID = "xx"
.Password = "xx"
End With
'2.ConnectionString zusammenstellen lassen vom ConnectionStingBuilder-Object
Dim CONNSTRING As String = ConnBuilder.ConnectionString
'3.Tabelle definieren
Const TblName As String = "tbl_vereinsdaten"
'4.SQL.Statement festlegen
Const strSQL As String = "Select * from " & TblName & ";"
'5.Verbindung aufbauen
Cn_sql.ConnectionString = CONNSTRING
Cn_sql.Open()
Dim cmd As SqlCommand = Cn_sql.CreateCommand
cmd.CommandText = strSQL
Dim dr As SqlDataReader = cmd.ExecuteReader
Do While dr.Read
ComboBox1.Items.Add(dr.Item(0).ToString)
Loop
'Connection schliessen
dr.Close()
Cn_sql.Close()
End Sub
II. Aus Combobox-Auswahl (hier die Vereinsauswahl gemeint) mit Dataset in Datagridview ausgeben
Private Sub ComboBox_auslesen
Dim TblName As String = "tbl_vereinsdaten"
Dim TblName1 As String = "tbl_spielerdaten"
'SQL.Statement festlegen
Dim strSQL As String
strSQL = "Select S_Name, S_Vorname, Nationalität, Herkunft, S_Alter, Position, Tore from " _
& TblName1 & " inner join " & TblName & " on " & TblName & ".pk_VereinID = " _
& TblName1 & ".fk_VereinID where pk_VereinID = ' " & ComboBox1.SelectedIndex + 1 & "'"
Dim ds As New DataSet
ds = DatasetFüllen(strSQL)
Dim myDataTable As New DataTable()
myDataTable = ds.Tables("DataTable")
With DataGridView1
DataGridView1.DataSource = ds
DataGridView1.DataMember = "DataTable"
End With
Public Function DatasetFüllen(ByVal strSQL As String) As DataSet
Dim Cn_sql As New SqlConnection
Dim ConnBuilder As SqlConnectionStringBuilder = New SqlConnectionStringBuilder()
Dim bindingSource1 As New BindingSource()
With ConnBuilder
.DataSource = "xxxx"
.InitialCatalog = "mog_sportverwaltung"
.UserID = "xx"
.Password = "xx"
End With
Dim CONNSTRING As String = ConnBuilder.ConnectionString
Cn_sql.ConnectionString = CONNSTRING
Dim cmd As New SqlCommand(strSQL, Cn_sql)
Dim da As New SqlDataAdapter(cmd)
Cn_sql.Open()
Dim ds As New DataSet()
da.Fill(ds, "DataTable")
Cn_sql.Close()
Return ds
End Function
End Sub
III. Zeilen in Datagridview löschen, und wieder aktualisieren bzw. speichern
Private Sub btn_löschen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_löschen.Click
Dim Cn_sql As New SqlConnection
Dim ConnBuilder As SqlConnectionStringBuilder = New SqlConnectionStringBuilder()
With ConnBuilder
.DataSource = "xxxx"
.InitialCatalog = "mog_sportverwaltung"
.UserID = "xx"
.Password = "xx"
End With
Dim ds As New DataSet
Dim da As New SqlDataAdapter
da.MissingSchemaAction = MissingSchemaAction.AddWithKey
Cn_sql.ConnectionString = ConnBuilder.ConnectionString
Dim TblName1 As String = "tbl_spielerdaten"
With DataGridView1
'DataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect
Dim Dr As Integer
Dr = MsgBox("Wirklich löschen?", MsgBoxStyle.Question + MsgBoxStyle.YesNo, "Achtung, Löschvorgang")
If Dr = vbYes Then
Dim x As Integer
Dim i As Integer
Dim y As Integer = .GetCellCount(DataGridViewElementStates.Selected)
For i = y - 1 To 0 Step -1
x = .SelectedCells(i).RowIndex
.Rows.RemoveAt(x)
da.UpdateCommand = New SqlCommand(" update " & TblName1 & " set S_Name = @s_name, S_Vorname = @s_vorname, " _
& " Nationalität = @nationalität, Herkunft = @herkunft, S_Alter = @s_alter, Position = @position, Tore = @tore ", Cn_sql)
da.UpdateCommand.Parameters.Add("@S_Name", SqlDbType.VarChar, 20, "S_Name")
da.UpdateCommand.Parameters.Add("@S_Vorname", SqlDbType.VarChar, 20, "S_Vorname")
da.UpdateCommand.Parameters.Add("@Nationalität", SqlDbType.VarChar, 30, "Nationalität")
da.UpdateCommand.Parameters.Add("@Herkunft", SqlDbType.VarChar, 30, "Herkunft")
da.UpdateCommand.Parameters.Add("@S_Alter", SqlDbType.Int, 1, "S_Alter")
da.UpdateCommand.Parameters.Add("@Position", SqlDbType.VarChar, 30, "Position")
da.UpdateCommand.Parameters.Add("@Tore", SqlDbType.Int, 1, "Tore")
Try
da.Update(ds, TblName1)
Catch ex As SqlException
MessageBox.Show(ex.Message, "Fehlermeldung", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
Finally
End Try
Next
Else
Exit Sub
End If
End With
End Sub
Ich bin zur Zeit Anfänger, und versuche mich an einem kleinen Projekt, nur leider scheitere ich schon am anfang.
Ich verwende einen SQL Server 2005 und die VBNet 2008 Umgebung.
Ich habe 2 Tabellen einmal für die Spieler und für Vereine, beide sind mittels Inner Join verknüpft (Primär und Foreign Key gesetzt).
In meiner WIndowsForm soll über eine ComboBox die Vereinsnamen aufgelistet werden, was ich mittels DataReader umgesetzt habe, wenn der Benutzer über die Combox einen Verein auswählt, dann erscheint in der Datagridview die Spieler, die zu dem Verein gehören. Klappt alles wunderbar.
Nun möchte ich aber dem Benutzer die Möglichkeit geben, Daten zu ändern bzw. zu löschen. Der Löschvorgang im Datagridview funktioniert zwar, aber die darauffolgende Aktualiserung auf die Tabelle klappt nicht, da die Tabelle nicht gefunden wird.. obwohl alles deklariert wurde...
Aktualisieren: TableMapping['tbl_spielerdaten'] oder DataTable 'tbl_spielerdaten' kann nicht gefunden werden ???
Ich habe mal den gesamt Quellcode reingesetzt in der Hoffnung, dass mir jemand den Fehler wiedergeben kann, würde mich freuen!
I. Combobox-Spalte füllen mit DataReader
Private Sub ReadData_SQLServer()
'1.Verbindung
Dim Cn_sql As New SqlConnection
Dim ConnBuilder As SqlConnectionStringBuilder = New SqlConnectionStringBuilder()
With ConnBuilder
.DataSource = "xxxx"
.InitialCatalog = "mog_sportverwaltung"
.UserID = "xx"
.Password = "xx"
End With
'2.ConnectionString zusammenstellen lassen vom ConnectionStingBuilder-Object
Dim CONNSTRING As String = ConnBuilder.ConnectionString
'3.Tabelle definieren
Const TblName As String = "tbl_vereinsdaten"
'4.SQL.Statement festlegen
Const strSQL As String = "Select * from " & TblName & ";"
'5.Verbindung aufbauen
Cn_sql.ConnectionString = CONNSTRING
Cn_sql.Open()
Dim cmd As SqlCommand = Cn_sql.CreateCommand
cmd.CommandText = strSQL
Dim dr As SqlDataReader = cmd.ExecuteReader
Do While dr.Read
ComboBox1.Items.Add(dr.Item(0).ToString)
Loop
'Connection schliessen
dr.Close()
Cn_sql.Close()
End Sub
II. Aus Combobox-Auswahl (hier die Vereinsauswahl gemeint) mit Dataset in Datagridview ausgeben
Private Sub ComboBox_auslesen
Dim TblName As String = "tbl_vereinsdaten"
Dim TblName1 As String = "tbl_spielerdaten"
'SQL.Statement festlegen
Dim strSQL As String
strSQL = "Select S_Name, S_Vorname, Nationalität, Herkunft, S_Alter, Position, Tore from " _
& TblName1 & " inner join " & TblName & " on " & TblName & ".pk_VereinID = " _
& TblName1 & ".fk_VereinID where pk_VereinID = ' " & ComboBox1.SelectedIndex + 1 & "'"
Dim ds As New DataSet
ds = DatasetFüllen(strSQL)
Dim myDataTable As New DataTable()
myDataTable = ds.Tables("DataTable")
With DataGridView1
DataGridView1.DataSource = ds
DataGridView1.DataMember = "DataTable"
End With
Public Function DatasetFüllen(ByVal strSQL As String) As DataSet
Dim Cn_sql As New SqlConnection
Dim ConnBuilder As SqlConnectionStringBuilder = New SqlConnectionStringBuilder()
Dim bindingSource1 As New BindingSource()
With ConnBuilder
.DataSource = "xxxx"
.InitialCatalog = "mog_sportverwaltung"
.UserID = "xx"
.Password = "xx"
End With
Dim CONNSTRING As String = ConnBuilder.ConnectionString
Cn_sql.ConnectionString = CONNSTRING
Dim cmd As New SqlCommand(strSQL, Cn_sql)
Dim da As New SqlDataAdapter(cmd)
Cn_sql.Open()
Dim ds As New DataSet()
da.Fill(ds, "DataTable")
Cn_sql.Close()
Return ds
End Function
End Sub
III. Zeilen in Datagridview löschen, und wieder aktualisieren bzw. speichern
Private Sub btn_löschen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_löschen.Click
Dim Cn_sql As New SqlConnection
Dim ConnBuilder As SqlConnectionStringBuilder = New SqlConnectionStringBuilder()
With ConnBuilder
.DataSource = "xxxx"
.InitialCatalog = "mog_sportverwaltung"
.UserID = "xx"
.Password = "xx"
End With
Dim ds As New DataSet
Dim da As New SqlDataAdapter
da.MissingSchemaAction = MissingSchemaAction.AddWithKey
Cn_sql.ConnectionString = ConnBuilder.ConnectionString
Dim TblName1 As String = "tbl_spielerdaten"
With DataGridView1
'DataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect
Dim Dr As Integer
Dr = MsgBox("Wirklich löschen?", MsgBoxStyle.Question + MsgBoxStyle.YesNo, "Achtung, Löschvorgang")
If Dr = vbYes Then
Dim x As Integer
Dim i As Integer
Dim y As Integer = .GetCellCount(DataGridViewElementStates.Selected)
For i = y - 1 To 0 Step -1
x = .SelectedCells(i).RowIndex
.Rows.RemoveAt(x)
da.UpdateCommand = New SqlCommand(" update " & TblName1 & " set S_Name = @s_name, S_Vorname = @s_vorname, " _
& " Nationalität = @nationalität, Herkunft = @herkunft, S_Alter = @s_alter, Position = @position, Tore = @tore ", Cn_sql)
da.UpdateCommand.Parameters.Add("@S_Name", SqlDbType.VarChar, 20, "S_Name")
da.UpdateCommand.Parameters.Add("@S_Vorname", SqlDbType.VarChar, 20, "S_Vorname")
da.UpdateCommand.Parameters.Add("@Nationalität", SqlDbType.VarChar, 30, "Nationalität")
da.UpdateCommand.Parameters.Add("@Herkunft", SqlDbType.VarChar, 30, "Herkunft")
da.UpdateCommand.Parameters.Add("@S_Alter", SqlDbType.Int, 1, "S_Alter")
da.UpdateCommand.Parameters.Add("@Position", SqlDbType.VarChar, 30, "Position")
da.UpdateCommand.Parameters.Add("@Tore", SqlDbType.Int, 1, "Tore")
Try
da.Update(ds, TblName1)
Catch ex As SqlException
MessageBox.Show(ex.Message, "Fehlermeldung", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
Finally
End Try
Next
Else
Exit Sub
End If
End With
End Sub
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 175300
Url: https://administrator.de/forum/aus-datagridview-daten-aktualisieren-und-in-tabelle-zurueckspeichern-findet-aber-die-tabelle-nicht-175300.html
Ausgedruckt am: 21.04.2025 um 20:04 Uhr
1 Kommentar
Du hast hier schonmal einen Logik-Fehler drin.
Entweder du benutzt einen SqlDataAdapter - und dann definierst du nur Vorlagen für die Queries und bindest den an das DataSet.
Oder du machst es ganz von Hand, dann brauchst du aber auch keinen SqlDataAdapter.
Zudem solltest du die DB-Verbindung nicht in jeder Funktion neu aufbauen, sondern nur einmal beim Programmstart.
Entweder du benutzt einen SqlDataAdapter - und dann definierst du nur Vorlagen für die Queries und bindest den an das DataSet.
Oder du machst es ganz von Hand, dann brauchst du aber auch keinen SqlDataAdapter.
Zudem solltest du die DB-Verbindung nicht in jeder Funktion neu aufbauen, sondern nur einmal beim Programmstart.