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
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!
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
}
Hallo jHammer
Ich bin offengestanden kein SQL Experte aber seit wann hat ein SQL Command ein ";" ?
Beste Grüsse
Diräkt
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.
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
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
Und? Auch in einer lokalen Datenbank gibt es DELETE, UPDATE usw.
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?
Bitte beachte auch [Hinweis] Wie poste ich richtig? Punkt 2.3
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.
lg Lion
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?
und solche Sicherheitsüberprüfungen einbauen.
Keine Überprüfungen einbauen sondern einfach Parameter verwenden:
[Artikelserie] Parameter von SQL Befehlen