vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Blitzschnelles Erstellen von grafischen Diagrammen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

ADO.NET / Datenbanken
"richtige Datenbankverbindung" 
Autor: janno76
Datum: 22.03.23 17:03

Hallo,

ich habe jahrelang mit meinen Datenbankverbindungen nur so rumgestümpert. Jetzt soll das mal „richtig“ gemacht werden und, ich weiß nicht warum, kommen immer Fragen bei der Suche auf, als Antworten. Deshalb hier meine Fragen an die Besten:

Situation:
Ich habe eine MS SQL Datenbank und ein vb.net-Programm mit Datagridviews (DGV)
Ich hab jetzt mehrere Verbindungsmöglichkeiten gefunden, bin mir aber über die Richtigkeit und Vor-&Nachteile der Varianten nicht ganz im Klaren.

Dim dt As New DataTable
Dim bs As New BindingSource

Var1:
DGV.DataSource = dt -> einfachste Variante, Zack alles da

Var2:
bs.DataSource = dt
DGV.DataSource = bs -> auch alles da

So wie ich es verstanden habe, werden, wenn ich jetzt einen ZellenWert im DGV ändere, dieser auch automatisch in der DataTable angepasst. Richtig?

Jetzt aber zum Knackpunkt.

Ich kann auf den DGV_CellEndEdit-Event reagieren, über die ZellenPositionen, die entsprechende Datenbanktabellenzeile (geiles Wort) heraussuchen und über einen Updatebefehl ändern.

Aber ist das im Sinne des Erfinders?

Falls nein: Wie kommen dann die Änderungen aus dem DGV/DataTable in die DB-Tabelle?

Bei vollständige Databindings finde ich den Overhead viel zu groß. Ich suche nach einer schlanken Lösung und wäre für Eure Hilfe seehr dankbar

Gruß Janno

Beitrag wurde zuletzt am 22.03.23 um 17:04:03 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: "richtige Datenbankverbindung" 
Autor: Manfred X
Datum: 22.03.23 21:13

Hallo!

Es macht keinen Sinn nach jeder Änderung in einer Datatable sofort ein Datenbankupdate durchzuführen.

Das Laden der Daten erfolgt durch Ausführung des Selectbefehls in ein Dataset.
Es sollten immer nur die Daten parametergesteuert geladen/selektiert werden, die der Benutzer für
bestimmte Aufgaben benötigt (Dataset, Datarelation).

Die Datenbindung sollte über eine Bindingsource realisiert werden, weil damit mehr Möglichkeiten
gegeben sind.

VB-Studio erstellt gewöhnlich automatisch ein passendes Update-Kommando zusammen mit dem Select,
das bei Bedarf ausgeführt werden kann (z.B. benutzer- oder zeitgesteuert oder beim Schließen des Formulars).
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: "richtige Datenbankverbindung" 
Autor: effeff
Datum: 22.03.23 21:31

Also:

1. Du machst eine Connection zu einer Datenbank
2. Du machst eine Abfrage auf dieser Datenbank und fügst die Daten mittels DataAdapter in eine DataTable eines DataSets ein.
3. Die DataTable hängst Du dann per BindingSource an das DataGridView. Die BindingSource benötigst Du, damit sich DataGridView und DataTable abgleichen.
4. Wenn Du Änderungen gemacht hast in der DataTable, macht Dein DataAdapter ein Update. Wenn Du die Änderungen im DataGridView vorgenommen hast, musst Du dort noch ein datagridview.EndEdit einfügen.

Also im Prinzip so:

'Connection mit Verbindungsparametern zur Datenbank; Hier eine SQLEXPRESS-Db
Dim cn As New SqlClient.SqlConnection( _
  "Server=DeinRechnername\SQLEXPRESS;Database=DeinDatenbankname;User" & _
  "ID=DeineUserID;Password=DeinPasswort;Trusted_Connection=False; Connection" & _
  "Timeout=30;")
 
'DataSet erstellen
Dim ds As New DataSet
 
'SQL-String erstellen
Dim strSQL As String="SELECT * FROM Datenbanktabelle WHERE" & _
  "DeineSpalte='DeinSuchwert'"
 
'DataAdapter erstellen
Dim da As New SqlClient.SqlDataAdapter = New SqlClient.SqlDataAdapter(Abfrage, _
  cn)
 
'Mittels DataAdapter eine DataTable im DataSet füllen
da.Fill(ds, "DeinDataTableName")
 
'Eine BindingSource erstellen
Dim bs as BindingSource
 
'Der BindingSource mitteilen, welche Daten sie binden soll; Hier aus dem 
' DataSet "ds" die DataTable "DeinDataTableName"
bs.DataSource=ds.Tables("DeinDataTableName")
 
'Dem Datagridview mitteilen, welche Datenquelle es benutzen soll
datagridview.DataSource=bs
 
___________________________
 
'Änderungen in die Datenbank übernehmen:
 
'Dem DataGridView mitteilen, dass die Arbeiten daran beendet sind
datagridview.EndEdit
 
'Einen CommandBuilder für den DataAdapter erstellen
Dim commandBuilder As SqlClient.SqlCommandBuilder = New _
  SqlClient.SqlCommandBuilder(da)
 
'Den DataAdapter updaten; Die Daten werden nun von der DataTable 
' "DeineDataTableName" des DataSets "ds" in die Datenbank geschrieben
da.Update(ds, "DeinDataTableName")

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: "richtige Datenbankverbindung" 
Autor: janno76
Datum: 23.03.23 06:50

Das Beispiel macht es doch mal deutlich.
Vielen Dank!!!

Es führen so viele Wege nach Rom,
dass ich mich total verlaufen habe.
Ich probiere es gleich aus.

Danke Euch
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: "richtige Datenbankverbindung" 
Autor: janno76
Datum: 23.03.23 07:56

Hallo EffEFf (und gerne auch andere),

ich habe es ausprobiert, muss aber leider scheintern und verstehe die Fehlermeldungen nicht
 
Dim oSQL_CONNECT As New SqlConnection("User ID=" + gl_Username + ";Password=" + _
  gl_Password + ";Initial Catalog=" + gl_Database + ";Data Source=" + gl_Server)
Dim oDS As DataSet
Dim cSQL As String = "SELECT * FROM MA"
Dim oDA As New SqlClient.SqlDataAdapter
Dim oDT As New DataTable
Dim oBS As New BindingSource		
 
oDA = New SqlClient.SqlDataAdapter(cSQL, oSQL_CONNECT)
oDA.Fill(oDS, oDT)
oBS.DataSource = oDS.Tables(oDT)
DGV.DataSource = oBS
Fill & Tables unterkringelt er mir und sagt Fehler bei Überladungsauflösung (was auch immer das sein mag)
Kann mir jemand sagen, was ich falsch mache?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: "richtige Datenbankverbindung" 
Autor: effeff
Datum: 23.03.23 08:10

oDA.Fill(oDS, oDT)
Du musst hier keine DataTable übergeben, sondern einen String. Der DataAdapter möchte eine DataTable in einem DataSet füllen und will wissen, wie diese Tabelle, die er dann anlegt, heißen soll.

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: "richtige Datenbankverbindung" 
Autor: janno76
Datum: 23.03.23 08:22

Der Knoten hat mich festgehalten. Danke
Das Laden läuft schonmal, jetzt kommt das Update/Insert/Delete.

Vielen Dank für Eure Hilfe.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel