D
Dirk Michaelsen
Guten Morgen,
ich habe eine C#-Applikation geschrieben, die eine SQL Server Compact
Edition Datenbank für eine MDE-Anwendung erstellt. Das Füllen der
Datenbank funktioniert auch soweit sehr gut. Lediglich die Erstellung
der Indizes will einfach nicht funktionieren.
Zur Erstellung der Indizes verwende ich folgende Methode:
--- snip ---
private SqlCeConnection conn;
private SqlCeTransaction trans;
public void GenerateIndices()
{
Console.WriteLine("Erstelle Indizes");
try
{
trans = conn.BeginTransaction();
string[] indexDefinitions =
{
"CREATE INDEX ArtstmId ON Artikel (artstm_id)",
"CREATE INDEX ArtikelNr ON Artikel (artikel_nr)",
"CREATE INDEX MestmId ON Mengeneinheiten (mestm_id)",
"CREATE INDEX ArtstmId ON Mengeneinheiten
(artstm_artstm_id)",
"CREATE INDEX MestmId ON Ean (mestm_mestm_id)",
"CREATE INDEX Ean ON Ean (ean)",
"CREATE INDEX MestmId ON Konditionen (mestm_mestm_id)"
};
foreach (string index in indexDefinitions)
{
Console.WriteLine("sende SQL-Command: " + index);
SqlCeCommand cmd = conn.CreateCommand();
cmd.CommandText = index;
cmd.ExecuteNonQuery(); // dies ist Zeile 140
}
trans.Commit();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
--- snip ---
Bereits beim ersten Aufruf von cmd.ExecuteNonQuery() springt die
Anwendung in den Catch-Block mit der relativ nichtssagenden Meldung
"[Artikel]" und dem folgenden Exception-Stacktrace:
$exception {" [ Artikel ]"} System.Exception
{System.Data.SqlServerCe.SqlCeException}
bei System.Data.SqlServerCe.SqlCeCommand.ProcessResults(Int32 hr)
bei System.Data.SqlServerCe.SqlCeCommand.ExecuteCommandText(IntPtr&
pCursor, Boolean& isBaseTableCursor)
bei
System.Data.SqlServerCe.SqlCeCommand.ExecuteCommand(CommandBehavior
behavior, String method, ResultSetOptions options)
bei System.Data.SqlServerCe.SqlCeCommand.ExecuteNonQuery()
bei MDEDatenImport.DataConnection.GenerateIndices() in C:\Dokumente
und Einstellungen\dimich\Eigene Dateien\Visual Studio
2005\Projects\MDEDatenImport\MDEDatenImport\DataConnection.cs:Zeile
140.
Was mache ich falsch?
Gruß
Dirk
ich habe eine C#-Applikation geschrieben, die eine SQL Server Compact
Edition Datenbank für eine MDE-Anwendung erstellt. Das Füllen der
Datenbank funktioniert auch soweit sehr gut. Lediglich die Erstellung
der Indizes will einfach nicht funktionieren.
Zur Erstellung der Indizes verwende ich folgende Methode:
--- snip ---
private SqlCeConnection conn;
private SqlCeTransaction trans;
public void GenerateIndices()
{
Console.WriteLine("Erstelle Indizes");
try
{
trans = conn.BeginTransaction();
string[] indexDefinitions =
{
"CREATE INDEX ArtstmId ON Artikel (artstm_id)",
"CREATE INDEX ArtikelNr ON Artikel (artikel_nr)",
"CREATE INDEX MestmId ON Mengeneinheiten (mestm_id)",
"CREATE INDEX ArtstmId ON Mengeneinheiten
(artstm_artstm_id)",
"CREATE INDEX MestmId ON Ean (mestm_mestm_id)",
"CREATE INDEX Ean ON Ean (ean)",
"CREATE INDEX MestmId ON Konditionen (mestm_mestm_id)"
};
foreach (string index in indexDefinitions)
{
Console.WriteLine("sende SQL-Command: " + index);
SqlCeCommand cmd = conn.CreateCommand();
cmd.CommandText = index;
cmd.ExecuteNonQuery(); // dies ist Zeile 140
}
trans.Commit();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
--- snip ---
Bereits beim ersten Aufruf von cmd.ExecuteNonQuery() springt die
Anwendung in den Catch-Block mit der relativ nichtssagenden Meldung
"[Artikel]" und dem folgenden Exception-Stacktrace:
$exception {" [ Artikel ]"} System.Exception
{System.Data.SqlServerCe.SqlCeException}
bei System.Data.SqlServerCe.SqlCeCommand.ProcessResults(Int32 hr)
bei System.Data.SqlServerCe.SqlCeCommand.ExecuteCommandText(IntPtr&
pCursor, Boolean& isBaseTableCursor)
bei
System.Data.SqlServerCe.SqlCeCommand.ExecuteCommand(CommandBehavior
behavior, String method, ResultSetOptions options)
bei System.Data.SqlServerCe.SqlCeCommand.ExecuteNonQuery()
bei MDEDatenImport.DataConnection.GenerateIndices() in C:\Dokumente
und Einstellungen\dimich\Eigene Dateien\Visual Studio
2005\Projects\MDEDatenImport\MDEDatenImport\DataConnection.cs:Zeile
140.
Was mache ich falsch?
Gruß
Dirk