Announcement

Collapse
No announcement yet.

Synchronisieren von Daten

Collapse
This topic is closed.
X
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Synchronisieren von Daten

    Hallo C# Entwickler/in,

    ich habe mit Visual C# eine kleine Win. Applikation geschrieben, wo mit der User seine Daten Lokal als XML Datei speichern kann.
    ...
    DataTable dt1 = new DataTable("XY");
    myDataSet.Tables.Add(dt1)
    myDataSet.WriteXml(pathxml);
    myDataSet.WriteXmlSchema(pathsheam);
    ...

    Nun möchte die Applikation so erweitern dass man die Möglichkeit hat die Dataset mit dem Server (Win. Server 2008 mit SQL Server 2008 R2) zu synchronisieren.

    Der User hat Remote-Zugriff auf die Datenbank und verbindet er sich mit VPN.

    Ist das machbar und vor allem, wie?

    hat jemand ne Idee?

    Vielen Dank im voraus
    Grüß

  • #2
    Hallo,

    guck mal: How to: Configure Data Synchronization in an Application. Vllt. ist das eher was du suchst. Das nimmt dir viel Arbeit ab.


    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      Mojen mojen,

      danke für die schnellen Antwort.
      Die Ordner SQL Scripts und SQLUndoScripts so wie *.sdf , *.xsd und *.sync sind erstellt.
      http://msdn.microsoft.com/de-de/library/bb384472.aspx

      aber es läuft mit der Sync. noch nicht.

      In mein Applikation verwende ich ne tabControl (tab_A, tab_B), bei tab_A benutze ich dataGridView und tab_B listView. ich habe quasi zwei Tabele b.z.w 2 DataSets.

      worauf muss ich noch achten? spiel ne Rolle welche ausgabe/Eingabe Edit ich verwende? :-)

      Danke und Viele Grüße

      Comment


      • #4
        Hallo,

        hast du auch den Code aus dem Beispiel
        [highlight=c#]
        NorthwindCacheSyncAgent syncAgent = new NorthwindCacheSyncAgent();
        Microsoft.Synchronization.Data.SyncStatistics syncStats;
        syncStats = syncAgent.Synchronize();
        [/highlight]
        entsprechend angepasst und ausgeführt?


        mfG Gü
        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

        Comment


        • #5
          Hi,

          ja habe ich:

          ...button_synchronisieren_Click...
          zeitDataSetSyncAgent syncAgent = new zeitDataSetSyncAgent();
          Microsoft.Synchronization.Data.SyncStatistics syncStats = syncAgent.Synchronize();
          MessageBox.Show("Changes downloaded: " + syncStats.TotalChangesDownloaded.ToString());

          und unter Form__Load
          this.tbZEITTableAdapter.Fill(this.zeitDataSet1.tbZ EIT);

          Danke
          VG

          Comment


          • #6
            Hallo,

            welchen Wert hat syncStats?

            Ich denke aber das Problem liegt darin dass im Form_Load gefüllt wird und erst später, beim Button-Click, die Synchronisation durchgeführt wird. Das Füllen gehört schon nach dem Sync. Wird wohl auch so im Beispiel sein - müsste ich aber erst schauen, alles andere wäre jedenfalls sinnfrei


            mfG Gü
            "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

            Comment


            • #7
              Hallo,

              mercé
              das this.tbZEITTableAdapter.Fill(this.zeitDataSet1.tbZ EIT); habe ich auch wie der beispiel nach Sync. gestellt, Funktioniert immer noch nicht :-(

              Ich werd noch mal anhand ne einfaches Beispiel testen.

              so sieht mein syncStats aus.


              Danke und Viele Grüße

              Comment


              • #8
                Hallo,

                so sieht mein syncStats aus.
                Danke und Viele Grüße
                ich glaub nciht dass "Danke und Viele Grüße" drin steht

                Ich meine welchen Wert hat diese Variable? Daran kannst du erkennen ob der Sync-Vorgang erfolgreich war oder nicht.


                mfG Gü
                "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                Comment


                • #9
                  Hi,

                  Sorry, ich hatte eigentlich ne image eingefügt ;-)

                  Die SyncStatus:

                  Name Wert Typ
                  syncStats.DownloadChangesFailed 0 int
                  syncStats.DownloadChangesApplied 0 int
                  syncStats.SyncCompleteTime {15.07.2011 11:00:08} System.DateTime
                  syncStats.SyncStartTime {15.07.2011 11:00:07} System.DateTime
                  syncStats.TotalChangesDownloaded 0 int
                  syncStats.TotalChangesUploaded 0 int
                  syncStats.UploadChangesApplied 0 int
                  syncStats.UploadChangesFailed 0 int

                  Die *.xsc Datei unter *.xsd ist leer ?!?

                  Viele Grüße

                  Comment


                  • #10
                    Hallo,

                    ich hab das Bild vorhin nicht gesehen. Da war nix - ist aber egal, jetzt ist es da.

                    Warum nix synchronisiert wird kann auch daran liegen dass die Daten eh synchron sind.

                    Ich gehe mal davon aus dass das Sync-Framework fehlerfrei funktioniert - zumindest bis zum Beweis des Gegenteils.
                    Wenn dein Code dem MSDN-Beispiel entspricht wird der wohl auch passen.

                    Probier einfah mal in der Quelle die Daten zu manipulieren - nur 1 - und schau ob auch 1 aktualsiert wird.

                    mfG Gü
                    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                    Comment


                    • #11
                      hi,

                      danke, es funktioniert. aber nur wenn ich mein Applikation auf dem Server laufen lasse.
                      Die Applikation soll lockal laufen, mit ne VPB zugang verbindet sich der User mit dem Server (Win server & SQL server 2008R2).
                      wahrscheinlich brauche ich ne Port Nr. hier Oder ??

                      Jedenfalls bekomme ich folgende Fehlermeldung ausgeworfen:
                      Netzwerkbezogener oder instanzspezifischer Fehler beim Herstellen einer Verbindung mit SQL Server. Der Server wurde nicht gefunden, oder auf ihn kann nicht zugegriffen werden. Überprüfen Sie, ob der Instanzname richtig ist und ob SQL Server Remoteverbindungen zulässt. (provider: Named Pipes Provider, error: 40 - Verbindung mit SQL Server konnte nicht geöffnet werden)

                      Danke

                      Sorry VPN zugang
                      Zuletzt editiert von gfoidl; 18.07.2011, 18:38.

                      Comment


                      • #12
                        Hallo,

                        es steht alles in der Fehlermeldung. NamedPipes gehen halt nicht - konfiguriere TCP-Verbindungen. Bevor du fragst wie das geht guck in die MSDN.


                        mfG Gü
                        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                        Comment


                        • #13
                          hi,

                          bin leider noch nicht dazu gekommen,

                          habe aber ne andere Frage.
                          Ich erstelle mit VC# 2010 Express ne Project, füge ne LokalDatenbank (Database1.sdf) hinzu.
                          Der Assistent erstelt mir ne "tbDataSet.xsd". in Datenbank-Explorer habe ich ne Datenbank ohne Tabele, wo ich ne Table mit den Attributen erstelle.
                          Der tbDataSet.xsd beinhaltet nun meine Tabelle mit tbTableAdapter (insert,select,Delete und Update). Es wird außserdem ne "tbDataSet" unter Datenduellen erstellt wo ich meine tabelle eingebunden habe, ziehe die Table in dem Form, der Assistent erstellt Folgende Code:

                          [highlight=c#]
                          private void tbBindingNavigatorSaveItem_Click(object sender, EventArgs e)
                          {
                          this.Validate();
                          this.tbBindingSource.EndEdit();
                          this.tableAdapterManager.UpdateAll(this.tbDataSet) ;
                          this.tbTableAdapter.Update(this.tbDataSet.tb);
                          }
                          private void Form_Load(object sender, EventArgs e)
                          {
                          this.tbTableAdapter.Fill(this.tbDataSet.tb);
                          }
                          [/highlight]

                          nun sollen die Daten sätze in LokalDatenbank gespeichert werden? was aber nicht geschieh?!
                          ist eigentlich die Gedanke und Vorgehensweis Richtig??

                          connectionStringata Source=|DataDirectory|\Database.sdf

                          kennst du ne andere weg wo ich meine Datensätze Lokal speichern kann (außer XML)

                          Danke und Viele Grüße
                          Zuletzt editiert von gfoidl; 28.07.2011, 13:40. Reason: C#-Tags eingefügt

                          Comment


                          • #14
                            Hallo Aryan,

                            wenn die Vorgehensweise so ist im MSDN-Beitrag dann schon. Ich habs damals nach dieser Anleitung probiert und es ging. Wenns bei dir nicht geht liegt irgendwo der Hund begraben.

                            kennst du ne andere weg wo ich meine Datensätze Lokal speichern kann (außer XML)
                            Es gibt viele Möglichkeiten. Die Frage ist nur ob es zielführend ist "das Rad neu zu erfinden". Wenn du zB die Daten in eigene Klassen liest dann binär serialisierst sind die Daten lokal gespeichert. Aber gibt es ein Synchronisierung? Nein. Lohnt es sich diese selbst zu implementieren? Nein, zu aufwändig, zu fehlerbehaftet, etc. Es ist schon besser auf getestete und (i.d.R.) funktionierende Lösunge zurückzugreifen.


                            mfG Gü
                            "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                            Comment


                            • #15
                              Mojen mojen,

                              danke für info, du hast Recht, es Funktioniert. Ich habe nur die ganze Zeit in Falsche Tabelle geschaut :-)

                              Es geht und die Daten werden lokal in *.sdf geschieben. was ich noch nicht hin bekommen habe ist dass z.B in mein DataGridView soll ein Feld aus zwei weiteren Felder berechnet werden. (die Zeit wird aus Anreise und Ankunftszeit berechnet)

                              in meine erste Version als ich die Daten Lokal in XML format gespeichert hatte, habe ich das Feld so berechnet:

                              foreach (DataGridViewRow row in this.dataGridView.Rows)
                              {
                              DataRow dr = dt2.NewRow();
                              dr = dt2.NewRow();
                              ....
                              dr[1] = row.Cells[1].Value;
                              ...
                              dr[3] = row.Cells[3].Value;
                              ...
                              dr[6] = stunden(dr[3].ToString()) - stunden(dr[1].ToString());
                              ......
                              dt2.Rows.Add(dr);
                              }
                              ....

                              Nun wird alles Automatisch generiert :-)
                              hast du da ne Idee?

                              Danke und Schönes WE

                              Comment

                              Working...
                              X