Datenabgleich?

Brauni

Erfahrenes Mitglied
Hallo

Ich versuche gerade 2 sql Server miteinander abzugleichen.
Unter Access wäre dies kein Problem nur ich möchte es gerne mit vb2005 probieren da man dort eine Exe Datei erstellen kann.

Der Zugriff auf die Datenbank hätte ich schon:
Private con As New SqlConnection (System.Configuration.ConfigurationManager.ConnectionStrings("aConnectionString").ToString)
Habe damit schon erfolgreich Daten in ein DataGridView ausgelesen.

Mein Problem ist folgndes:
Ich suche mir den ersten Datensatz heraus, wenn dieser gleich mit dem Datensatz vom anderen Server ist, springt er zum nächsten.
Wenn nicht, dann muss er einen UpdateCommand ausführen.

Eine While Not Schleife bis EOF?
Wie springe ich zum nächsten Datensatz.

Versteht ich mein Problem?

Danke schon mal im Vorraus...........
 

Norbert Eder

Erfahrenes Mitglied
Warum zeigst du die Daten hierfür an? Das nimmt dir nur jede Menge Performance.

Wie soll der Abgleich erfolgen? Werden die Daten auf beiden Seiten geändert? Oder geht es darum, herauszufinden, ob ein Datensatz neuer ist als der andere, um den anderen dann zu überschreiben?
 

Brauni

Erfahrenes Mitglied
ja stimmt!
War ja auch nur ein Beispiel...

Es geht darum, ob ein Datensatz neuer ist als der andere, um den anderen dann zu überschreiben.
 

Norbert Eder

Erfahrenes Mitglied
Dann könntest du mit einem Feld arbeiten, welches als Zeitstempel für Aktualisierungen arbeitet. Ist der Zeitstempel neuer als in der andere Tabelle, dann updaten, sonst nichts.
 

Brauni

Erfahrenes Mitglied
genau
und wie löse ich das mit vb2005?

mit vb6 komme ich zum nächsten Datensatz mit rst.movenext usw.
Könntest mir vielleicht ein Beispiel geben?
 

Norbert Eder

Erfahrenes Mitglied
Du brauchst die entsprechenden Zeitstempel in den jeweiligen Tabellen. Zudem weiß ich nicht welche Datenbanken zu verwendest, aber prinzipiell kann ich dir hier folgenden Hinweis geben:

- OleDb (OleDbConnection, OleDbCommand, ...)
- SQL Server (SqlConnection, SqlCommand, ...)
- ODBC (OdbcConnection, OdbcCommand, ...)

Schlag diese Klassen in der MSDN (natürlich nur die für dich passend sind) nach, da bekommst du auch Beispiele zur Anwendung.
 

Brauni

Erfahrenes Mitglied
Hallo

Habe mir folgende Code mal zusammengeschrieben:

Dim ds As New DataSet
Dim da As New SqlDataAdapter("select * from Table_1 where pat_nr=1 ", con)

da.Fill(ds, "famname")
Dim row As DataRow = ds.Tables(0).Rows(1)

row.BeginEdit()
row("famname") = "aaa"
row.EndEdit()

Dim objCommandBuilder As New SqlCommandBuilder(da)
da.Update(ds, "a")

Wie mache ich jetzt eine Schleife, dass er mir alle Datensätze im Dataset durchläuft?
 
Zuletzt bearbeitet:

Norbert Eder

Erfahrenes Mitglied
Hach ja .. anstrengender Tag. Sorry, hatte übersehen, dass du den SQL Server verwendest. Hattest ja auch die entsprechenden Klassen schon im Source hinterlegt. Sorry.

Du kannst mit einem ForEach durch die Rows-Auflistung gehen. Derzeit fragst du nur das Element 1 ab.
 

Brauni

Erfahrenes Mitglied
habe folgendes aber er speichert es leider nicht:

Dim ds As New DataSet
Dim da As New SqlDataAdapter("select * from Table_1 where pat_nr=1", con)

'dataset füllen
da.Fill(ds, "a")

Dim row As DataRow = ds.Tables(0).Rows(0)

For Each row In ds.Tables(0).Rows
row.BeginEdit()
row("famname") = "aaa"
row.EndEdit()
Next

Dim objCommandBuilder As New SqlCommandBuilder(da)
da.Update(ds, "a")
 
Zuletzt bearbeitet:

Norbert Eder

Erfahrenes Mitglied
Nach
C#:
row.EndEdit();
fehlt dir ein
C#:
row.AcceptChanges();
Dann sollte es klappen. Ohne das AcceptChanges werden die Änderungen von der DataRow nicht übernommen.