Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
SQL: Synchronisierung zweier Datenbanken
jHammer
myCSharp.de - Member



Dabei seit:
Beiträge: 14

Themenstarter:

SQL: Synchronisierung zweier Datenbanken

beantworten | zitieren | melden

verwendetes Datenbanksystem: (My)SQL(lite)

Hallo zusammen,

ich habe eine Frage.

Ich plane im Moment eine Anwendung für den örtlichen CVJM. (Selber Vorstandsmitgleid)
Bei dieser Anwendung soll es eine Onlinedatenbank geben. Diese wird wahrscheinlich MySQL werden. (Die neue Version 5.5 klingt ja ganz interessant)
Auf diese Datenbank greifen halt verschiedene Clients drauf zu und laden Daten hoch. Diese wird immer den aktuellsten Stand enthalten.
Für den Fall das einige Mitarbeiter längere Zeit keinen Internetzugang haben, soll es eine Offline-Datenbank geben. (Wahrscheinlich SQLite, für andere/bessere Alternativen bin ich immer offen)
Man soll einfach auf einen Button klicken und dann soll das Programm (wenn es möglich ist) die beiden Datenbanken synchronisieren. Beim ersten Sync ja noch kein Problem. Aber wie laufen die nächsten Syncs?

Gibt es SQL-seitig eine Möglichkeit dazu oder hat sonst irgendwer eine Idee, wie ich dieses Problem lösen kann?

Noch eine andere Frage hätte ich. Es sollen auch Daten gespeichert werden. (.doc oder PDFs)
Wie würdet ihr das machen? Die Dateien direkt in die Datenbank (mit BLOB, oder?) oder sollten in die Datenbank nur die Pfade zu den Dateien? (Dann wäre natürlich eine 100%ige Offlinefunktionalität nicht mehr gegeben.

Für jegliche Hilfe bin ich sehr dankbar.

Mit freundlichen Grüßen

jHammer
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von jHammer am .
private Nachricht | Beiträge des Benutzers
Viper78
myCSharp.de - Member



Dabei seit:
Beiträge: 163
Herkunft: Dortmund

beantworten | zitieren | melden

HI,

Es gibt von Microsoft ein Sync Framework.

Um Datenbanken zu Syncen kannst du das Konzept hier finden.

Datein als Blob ist meine empfehlung.
Wobei mit dem Sync Framwork kannst du auch Datein direkt syncen.

Ich selber hab es noch nicht benutzt. Hier im Forum schrieben schon einige Positives da drüber.

MfG
Björn
Das Leben ist schön!
private Nachricht | Beiträge des Benutzers
jHammer
myCSharp.de - Member



Dabei seit:
Beiträge: 14

Themenstarter:

beantworten | zitieren | melden

Hallo,

ich bin mittlerweile mit der Entwicklung ein gutes Stück vorangeschritten. Aber jetzt hänge ich an einem dummen Fehler und weiß nicht, wie ich ihn beheben kann.

Ich habe gestern Nacht die Suchfunktion implementiert. Soweit auch kein Problem, aber ich kriege jedesmal eine Fehlermeldung "No Such Table: spiele." bzw beim Testen "No Such Table: in_out."

Das ist bestimmt nicht die allertollste Programmierung aber diesen Anspruch stelle ich auch nicht an mich, daher bitte nur bei der Fehlerbehebung helfen. Danke ;)

Der lange CommandText, der auskommentiert ist, ist normalerweise der richtige SELECT. Der "SELECT * FROM in_out;" ist nur zum Testen da.

Das komische an dem Fehler ist, dass er nur auftaucht, wenn ich nicht den Code "Zeile für Zeile (Einzelschritt)" durchgehe. (Also "Starten ohne Debugging")
Gehe ich ihn Zeile für Zeile durch, funktioniert alles wunderbar. Ich habe den SELECT-String auch schon von Hand in die Datenbank eingeben und er führt zum erwünschten Ergebnis.

Ich hoffe, ihr könnt mir helfen.


private void btn_search_Click(object sender, EventArgs e)
        {
            connect();
            sql_con.Open();
            sql_cmd = sql_con.CreateCommand();
            #region Strings & Bools
            string tb1_txt;
            string tb2_txt;
            string tb3_txt;
            string tb4_txt;
            #endregion
            #region Programmsuche
            if (tb_srch_name.Text != "")
            {
                tb1_txt = "AND sp_name LIKE '%" + tb_srch_name.Text + "%'";
            }
            else
                tb1_txt = "";
            if (tb_srch_stichwort.Text != "")
            {
                tb2_txt = "AND sp_stichworte LIKE '%" + tb_srch_stichwort.Text + "%'";
            }
            else
                tb2_txt = "";
            if (str_cb_spart_auswahl != "")
            {
                tb3_txt = "AND spielarten.spart_bez LIKE '%" + str_cb_spart_auswahl.ToLower() + "%'";
            }
            else
                tb3_txt = "";
            if (str_in_out != "")
            {
                tb4_txt = "AND in_out_id LIKE '%" + str_in_out + "%'";
            }
            else
                tb4_txt = "";
            //string CommandText = "SELECT spiel_id Spielnummer, sp_name Name,  spielarten.spart_bez Spielart FROM spiele, spielarten WHERE spiele.spart_id = spielarten.spart_id " + tb1_txt + tb2_txt + tb3_txt + tb4_txt + ";";
            string CommandText = "SELECT * FROM in_out;";
            DB = new SQLiteDataAdapter(CommandText, sql_con);
            DS.Reset();
            DB.Fill(DS);
            Grid.DataSource = DT;
            sql_con.Close();

            #endregion
        }
private Nachricht | Beiträge des Benutzers
Diräkt
myCSharp.de - Member



Dabei seit:
Beiträge: 622
Herkunft: Schweiz

beantworten | zitieren | melden

Hallo jHammer


1. Achtung SQL Injection
2. ev. mal String Append oder String Format oder ähnliches anschauen ;)



Ich bin offengestanden kein SQL Experte aber seit wann hat ein SQL Command ein ";" ?



Beste Grüsse

Diräkt
private Nachricht | Beiträge des Benutzers
jHammer
myCSharp.de - Member



Dabei seit:
Beiträge: 14

Themenstarter:

beantworten | zitieren | melden

1.SQL Injection bei einer Embedded Datenbank? o0
Die Datenbank ist auf nur auf dem lokalen PC. Es werden keinen Daten übertragen.
2.Wie sollte mich das in irgendeiner Weise weiterbringen?

Bin mir auch grad nicht sicher, ob die gebräuchlichen SQL-Datenbanken ein Semikolon benötigen, aber SQLite benötigt es. Ohne das Semikolon wird der Befehl nicht abgeschickt und landet im Datennirvana.
private Nachricht | Beiträge des Benutzers
jHammer
myCSharp.de - Member



Dabei seit:
Beiträge: 14

Themenstarter:

beantworten | zitieren | melden

Problem behoben -.-

Ganz dummer Fehler meinerseits. Habe nicht bedacht, dass VS im "Nicht-Debug"-Modus auf den Release-Ordner zugreift und im Debug-Modus auf den Debug-Ordner zugreift.

Im Release-Ordner lag leider nicht dieselbe Datenbank, wie im Debug-Ordner.

Kopf->Tischplatte
private Nachricht | Beiträge des Benutzers
Lion1984
myCSharp.de - Member



Dabei seit:
Beiträge: 782
Herkunft: Österreich

beantworten | zitieren | melden

Zitat
1.SQL Injection bei einer Embedded Datenbank? o0
Die Datenbank ist auf nur auf dem lokalen PC. Es werden keinen Daten übertragen.

Und? Auch in einer lokalen Datenbank gibt es DELETE, UPDATE usw.
lg Lion
private Nachricht | Beiträge des Benutzers
jHammer
myCSharp.de - Member



Dabei seit:
Beiträge: 14

Themenstarter:

beantworten | zitieren | melden

Und? Auch in einer lokalen Datenbank gibt es DELETE, UPDATE usw.[/quote]
Was brächte es seine eigene Datenbank zu verändern? Natürlich könnte jemand böswilliges an den PC gehen und dann Daten verändern, aber da geb ich die Einhaltung einer gewissen Sicherheit an den PC-Inhaber ab. Für dieses kleine private Projekt ist es mir den Aufwand nicht wert.

Aber trotzdem würde es mich interessieren, wie ich denn falsche SQL-Statements in eine Abfrage, wo der selbsteingegebene String zwischen zwei %-Zeichen ist, einbinde?

Moderationshinweis von gfoidl (18.10.2010 - 12:43:59):

Bitte beachte auch [Hinweis] Wie poste ich richtig? Punkt 2.3

private Nachricht | Beiträge des Benutzers
Lion1984
myCSharp.de - Member



Dabei seit:
Beiträge: 782
Herkunft: Österreich

beantworten | zitieren | melden

Zitat
tb2_txt = "AND sp_stichworte LIKE '%" + tb_srch_stichwort.Text + "%'";

Wenn tb_srch_stichwort.Text z.B. folgendes wäre:
"sometext%'; DELETE * FROM ...;"

Für Sinn und Unsinn möchte ich gar nicht reden, ich meinte nur, möglich ist es.

€dit: Fehlerteufel entwischt.
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Lion1984 am .
lg Lion
private Nachricht | Beiträge des Benutzers
jHammer
myCSharp.de - Member



Dabei seit:
Beiträge: 14

Themenstarter:

beantworten | zitieren | melden

Ok, das ist logisch. Da das Projekt nachher mal in eine Online-Lösung übergehen wird, werde ich mich dahingehend nochmal mit dem Thema genauer beschäftigen und solche Sicherheitsüberprüfungen einbauen.

Gibt es sonst noch irgendwelche Sicherheitsmerkmale auf die ich achten sollte?
private Nachricht | Beiträge des Benutzers
Lennart
myCSharp.de - Member



Dabei seit:
Beiträge: 429
Herkunft: Bawü

beantworten | zitieren | melden

Zitat von jHammer
und solche Sicherheitsüberprüfungen einbauen.

Keine Überprüfungen einbauen sondern einfach Parameter verwenden:
[Artikelserie] Parameter von SQL Befehlen
private Nachricht | Beiträge des Benutzers