verwendetes Datenbanksystem: SQL Compact 3.5
Visual Studio 2008 CF2
Hallo,
ich habe auf einem gerät eine Compact DB, diese wird regelmäßig mit Daten aus einer einer anderen CSV Datei gefüllt. Soweit so gut. Wenn ich nun das erste mal eine Suche starte dauert es ca. 2min., ab dann wieder wie gewohnt ca. 1sek.
Auf dem Suchfelder ist ein Index angelegt.
Nun dachte ich, wenn ich den Index nach dem füllen reorganisiere wird es besser, aber dem ist nicht so.
Was mache ich falsch?
hier die funktion zum reorganiesieren.
using ( SqlCeConnection conn = new SqlCeConnection( "Data Source=" + Properties.Resources.DB_DataSource ) )
{
conn.Open();
try
{
SqlCeTransaction TRAN = conn.BeginTransaction();
SqlCeCommand SCC = new SqlCeCommand();
SCC.Connection = conn;
SCC.CommandText = "ALTER INDEX Idx_Ident";
SCC.CommandType = CommandType.Text;
SCC.Transaction = TRAN;
SCC.Prepare();
TRAN.Commit();
SCC.Dispose();
}
catch ( SqlCeException ex )
{
DisplaySQLCEErrors( ex );
}
finally
{
conn.Close();
}
}
Kann mir da jemand helfen?
Besten Dank
dimuwe
Hallo dimuwe,
solltest du den SqlCeCommand nicht noch ausführen, statt ihn nur vorzubereiten?
Gruß,
dN!3L
... dank für die Antwort.
ich habe nun folgendes zwischen geschoben
...
SCC.Prepare();
SCC.ExecuteNonQuery();
TRAN.Commit;
...
Nun bekomme ich folgenden Fehler:
[ 1,7,INDEX ]
????
Gruß
dimuwe
Nun bekomme ich folgenden Fehler:[ 1,7,INDEX ]
Ja, die tollen SqlCe-Fehlermeldungen...
Ich tippe mal auf "Zeile 1, ab Zeichen 7, Schlüsselwort 'INDEX'".
Fehlt da nicht noch was am SQL-Befehl? Reicht ein einfaches "ALTER INDEX Indexname" für eine Reorganisation aus?
Gruß,
dN!3L
ein einfaches "ALTER INDEX Indexname" für eine Reorganisation aus?
dN!3L
ALTER INDEX name ON table/schema REORGANIZE
Soweit ich weiß, sind Indexnamen nur im Objekt unique. Wär ein Wunder, wenn er den richtigen Index so reorganisieren würde...
... danke für die Antworten.
ich habe es nun so versucht:
SqlCeTransaction TRAN = conn.BeginTransaction();
SqlCeCommand SCC = new SqlCeCommand(); // "ALTER INDEX ALL ", conn );
SCC.Connection = conn;
SCC.CommandText = "ALTER INDEX Idx_EAN ON ArtikelTab REORGANIZE";
SCC.CommandType = CommandType.Text;
SCC.Transaction = TRAN;
SCC.Prepare();
SCC.ExecuteNonQuery();
TRAN.Commit();
SCC.Dispose();
Trotzdem kommt weiterhin der fehler: [ 1,7,INDEX ]
Wo liegt nur der Fehler?
dimuwe
Hallo dimuwe,
Trotzdem kommt weiterhin der fehler: [ 1,7,INDEX ]
Wo liegt nur der Fehler?
Da der SQL Compact ziemlich abgespeckt ist, wäre mein Vorgehen, erst einmal zu gucken, ob dieser Befehl überhaupt vom SQL-CE implementiert ist. "TRUNCATE" ist beispielsweise nicht implementiert, vielleicht ist es bei "ALTER INDEX" genauso.
Gruß,
dN!3L
... besten Dank für den Hinweis. Es scheint wohl so zu sein (bin noch auf der Suche ob es wirklich so ist), denn folgende Befehle funktionieren.
SCC.CommandText = "DROP INDEX \"ArtikelTab\".\"Idx_EAN\"";
SCC.CommandText = "CREATE INDEX \"Idx_EAN\" ON \"ArtikelTab\"(\"EAN\" ASC)";
wenn jemand weis, ob ALTER INDEX vom SQL Compact unterstützt wird kann es ja posten.
--- Habe es gefunden, es geht nicht mit ALTER INDEX
http://stackoverflow.com/questions/562705/how-do-you-disable-all-table-indexes-in-sql-server-compact-edition-via-an-sqlceco
Besten Dank nochmal
dimuwe
[...] es geht nicht mit ALTER INDEX
Dein eigentliches Problem ist also noch ungelöst!?
Hast du dir mal die SqlCeEngine-Klasse angeguckt? Vielleicht hilft ja ein Compact oder Repair...
Gruß,
dN!3L