Laden...

SQL Compact + Transaction

Erstellt von dimuwe vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.503 Views
D
dimuwe Themenstarter:in
168 Beiträge seit 2005
vor 14 Jahren
SQL Compact + Transaction

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

2.891 Beiträge seit 2004
vor 14 Jahren

Hallo dimuwe,

solltest du den SqlCeCommand nicht noch ausführen, statt ihn nur vorzubereiten?

Gruß,
dN!3L

D
dimuwe Themenstarter:in
168 Beiträge seit 2005
vor 14 Jahren

... 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

2.891 Beiträge seit 2004
vor 14 Jahren

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

C
52 Beiträge seit 2010
vor 14 Jahren

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...

D
dimuwe Themenstarter:in
168 Beiträge seit 2005
vor 14 Jahren

... 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

2.891 Beiträge seit 2004
vor 14 Jahren

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

D
dimuwe Themenstarter:in
168 Beiträge seit 2005
vor 14 Jahren

... 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

2.891 Beiträge seit 2004
vor 14 Jahren

[...] 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