Lassen Sie mich kurz mein Problem und dann zeigen Sie den Code.SQL-Datenbank mit datagridview Inhalt aktualisieren
Ich möchte Daten aus einer SQL-Datenbank extrahieren, in Visual Basic mithilfe von datagridview anzeigen, dem Benutzer ermöglichen, den Inhalt in der Datagridview zu ändern, und dann Änderungen in der Datenbank zurückgeben. Ich habe mehrere Ansätze mit Ratschlägen von Stackoverflow und anderen Foren ausprobiert, aber nichts funktioniert. Hier ist der Ansatz, der für mich am sinnvollsten war, aber wenn es einen besseren oder einfacheren Weg gibt, bin ich ganz Ohr.
Ich habe andere Teile des Codes entfernt, die irrelevant sind. Der Code erhält ordnungsgemäß Daten aus der Datenbank. fügt es in datagridview ein und zeigt es an. Wenn ich eine Zelle betrete, um den Inhalt zu ändern, und dann versuche, die Ergebnisse in der Datenbank zu speichern, bekomme ich den Laufzeitfehler.
Imports System.IO
Imports System.Data.OleDb
Imports System.Data.SqlClient
Public Class FrmRunTerm
Private connectionString As String
Private ControlResultsConnection As New SqlConnection
Private ReadDS As New SqlDataAdapter
Private ControlResultsDS As New DataSet
Private Sub FrmRunTerm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
CboWeek.Items.Add("Week 1 - Tuesday, November 15, 2016")
CboWeek.Items.Add("Week 2 - Tuesday, November 22, 2016")
CboWeek.Items.Add("Week 3 - Tuesday, November 29, 2016")
CboWeek.Items.Add("Week 4 - Tuesday, December 6, 2016")
CboWeek.Items.Add("Week 5 - Tuesday, December 13, 2016")
CboWeek.Items.Add("Week 6 - Tuesday, December 20, 2016")
CboWeek.Items.Add("Week 7 - Tuesday, December 27, 2016")
CboWeek.Items.Add("Week 8 - Tuesday, January 3, 2017")
CboWeek.Items.Add("Week 9 - Tuesday, January 10, 2017")
CboWeek.Items.Add("Week 10 - Tuesday, January 17, 2017")
CboWeek.Items.Add("Week 11 - Tuesday, January 24, 2017")
CboWeek.Items.Add("Week 12 - Tuesday, January 31, 2017")
If CboWeek.Text = "" Then
MessageBox.Show("Please select a week to process.", "Termination Control Utility Set", MessageBoxButtons.OK)
End If
End Sub
Private Sub Btn_CWA_Click(sender As Object, e As EventArgs) Handles Btn_CWA.Click
If CboWeek.Text <> "" Then
ListBox1.Items.Add("Processing continuation of weekly analysis...")
Application.DoEvents()
connectionString = "<a lot of stuff – but it works>"
Dim strControlResultsSql As String = "SELECT * FROM dbo.RG_Control_Results_Cumulative"
Using ControlResultsConnection As New SqlConnection(connectionString)
ControlResultsConnection.Open()
Using ReadDS As New SqlDataAdapter(strControlResultsSql, ControlResultsConnection)
ReadDS.Fill(ControlResultsDS)
End Using
End Using
Dim SQLCommandBlder As New SqlCommandBuilder(ReadDS)
DataGridView1.DataSource = ControlResultsDS.Tables(0)
Application.DoEvents()
End If
End Sub
Private Sub Btn_InterimSave_Click(sender As Object, e As EventArgs) Handles Btn_InterimSave.Click
ListBox1.Items.Add("Saving data...")
Application.DoEvents()
Dim SQLCB As New SqlCommandBuilder(ReadDS)
ReadDS.Update(ControlResultsDS)
ControlResultsDS.AcceptChanges()
SQLCB.Dispose()
ControlResultsConnection.close()
End Sub
End Class
Der Fehler, den ich bekommen, ist auf der Linie ReadDS.Update (ControlResultsDS). Der Fehler ist:
Eine nicht behandelte Ausnahme des Typs 'System.InvalidOperationException' aufgetreten in System.Data.dll
Zusätzliche Informationen: Die DataAdapter.SelectCommand Eigenschaft muss initialisiert werden.
Jeder Rat würde sehr geschätzt werden. Vielen Dank im Voraus!
Per Rahul Vorschlag, veränderte ich den Code wie folgt:
Dim SQLCB As New SqlCommandBuilder(ReadDS)
ReadDS.SelectCommand = New SqlCommand("Select * From dbo.RG_Control_Results_Cumulative")
ReadDS.SelectCommand.Connection = New SqlConnection(connectionString)
ReadDS.Update(ControlResultsDS)
ControlResultsDS.AcceptChanges()
SQLCB.Dispose()
Und bekam die folgende Laufzeitfehler bei der ReadDS.Update Zeile: '
Eine nicht behandelte Ausnahme des Typs System.InvalidOperationException 'in System.Data.dll aufgetreten
Weitere Informationen: Dynamic SQL-Generierung für den UpdateCommand wird nicht für einen SelectCommand tha unterstützt t gibt keine wichtigen Spalteninformationen zurück.
Vielen Dank und nochmals Entschuldigung für die Fragen des Newbie.
Danke Rahul. Bitte verzeih, dass ich hier ein Noob bin. Ich gebe zu, immer noch verwirrt zu sein. Konzeptionell habe ich bereits, was ich will, aus der Datenbank in den ControlResultsDS-Datensatz geladen. Ich habe dann die einzelne Tabelle in diesem Dataset mit Datagridview1 angezeigt. Der Benutzer nimmt dann Änderungen an datagridview1 vor und möchte diese zurück in die Datenbank stellen. Sollte ich eine andere Klasse benutzen? Ich habe so viele verschiedene Lösungen ausprobiert und keine funktioniert. Wieder entschuldige ich mich für das, was für viele von euch eine so einfache Frage ist. – OldEngineer
Also hier ist was ich versucht habe basierend auf Ihren Kommentar. – OldEngineer
Argh sorry über die vorherige Zeile - versuchen, den eingestellten Code zu zeigen, aber Probleme mit der Schnittstelle - mein Fehler, nicht vertraut mit dieser Schnittstelle; lass es mich herausfinden und poste dann den aktualisierten Code. Im Grunde habe ich hinzugefügt, was Sie vorgeschlagen, aber einen neuen Fehler bekommen - wird in Kürze veröffentlichen. Vielen Dank für Ihre Geduld! – OldEngineer