Ich habe eine Datenbankdatei erstellt, die die Messwerte jede Minute aktualisiert und in einer SQL Server CE-Datenbankdatei speichert. Da die Datenbank jedoch sehr groß wird, beginnt sie langsam zu werden.SQL Server CE & C# Nach dem Löschen von Datensätzen können keine Daten in einer Tabelle gelesen werden.
Ich beschloss, die ältesten Dateien zu löschen, sobald die Datenbank eine bestimmte Größe erreicht hat, da sie für mich keinen Nutzen mehr haben. Ich schaffte dies mit den folgenden Befehlen zu tun:
command.Append("DELETE FROM MyTable WHERE ID IN (SELECT TOP(" + difference.ToString() + ") ID From MyTable)");
wo difference.ToString()
Wert ich verwenden, um zu berechnen, wie viel ich will löschen.
Dies funktionierte erfolgreich, da ich die Datei mit CompactView
öffnen konnte und auch die Befehle in CompactView
eingeben konnte, um die gleichen Ergebnisse zu geben.
Jetzt begann mein Problem, als ich versuchte, die Daten zu lesen und in ein Diagramm zu aktualisieren. Also meine Codes in einer anderen Form geschieht Folgendes:
private void updateGraphTimer_Tick(object sender, EventArgs e)
{
using (SqlCeConnection connection = new SqlCeConnection(connectionString))
{
connection.Open();
using (SqlCeDataAdapter adapter = new SqlCeDataAdapter("SELECT * FROM MyTable", connection))
{
// some code that is not relevant between these two statements
using (DataTable table = new DataTable())
{
StringBuilder command = new StringBuilder();
command.Clear();
command.Append("SELECT TOP(1) ID FROM MyTable ORDER BY ID DESC");
using (SqlCeCommand com = new SqlCeCommand(command.ToString(), connection))
{
int value = (int)com.ExecuteScalar();
graphPage.latestID = value;
if (value > graphPage.startID)
{
DataColumn xDateColumn;
xDateColumn = new DataColumn("XDate");
xDateColumn.DataType = typeof(double);
table.Columns.Add(xDateColumn);
adapter.Fill(graphPage.startID, value, table);
Das Problem, das ich habe ist, dass die Tabelle leer ist, obwohl Wert von (int)com.ExecuteScalar()
einen Wert zurückgibt! Wenn ich das Löschen nicht durchgeführt habe, funktioniert alles einwandfrei!
Ich kann nicht herausfinden, was passiert! Das einzige, was mir einfällt, ist das Lesen und Schreiben der SQL-Datei.
Sehr geschätzt!
Ihr Sprichwort, wenn Sie das Löschen ausführen, zeigt die Tabelle leer? – Moudiz
Wie und wann führen Sie den Löschvorgang aus? Handelt es sich um einen manuellen Stapelprozess oder wird es automatisch von einem anderen Thread ausgeführt? Es scheint, dass es ein Synchronisierungsproblem geben könnte – salvolds
Es gibt 2 Timer auf separaten Formularen, 1 Timer wird verwendet, um die Datenbank mit den neuesten Daten zu füllen und es läuft die ganze Zeit. Der andere Timer wird verwendet, wenn das Graphikprogramm gestartet wird. Beide aktualisieren die Daten jede Minute oder schneller. Wenn die Datenbank groß wird, werden die ältesten Daten gelöscht. Währenddessen versucht das Graphikprogramm, die angezeigten Werte zu aktualisieren, indem dieselbe Datenbank gelesen wird. Obwohl das neueste ID-Feld funktioniert und korrekte Werte liefert, zeigt es beim Ausfüllen der Tabelle nichts an. Prost – aaz