Benutzer mit den meisten Antworten
SqlServerCompact Insert

Frage
-
Hallo zusammen,
in meine SqlServerCompact Datenbank möchte ich Datensätze einfügen. Zunächst zum Testen habe ich mir eine Tabelle "Test" erstellt mit zwei Datensätzen:ID - int und Name - varchar. Ich verwende als Entwicklungsumgebung VisualStudio 2012.
Anzeigen im DataGrid der WPF via TableAdapter klappt problemlos, das Einfügen aber nicht.
Ich habe dafür folgenden Code:
RiskAnalyzerDatabaseDataSetTableAdapters.TestTableAdapter ta = new RiskAnalyzerDatabaseDataSetTableAdapters.TestTableAdapter(); ta.Insert(1, "eins");
Es kommen keine Fehlermeldungen, bei den GenerateDBDirectMethods ist ein Haken gesetzt, damit auch Update und Delete erstellt werden, der TableAdapterKonfigurations-Assistent gibt an , dass INSERT, ... -Methoden erstellt wurden. Trotzdem findet sich die Zeile nicht in der Tabelle.
Wo liegt der Fehler?
Gruß
Ottilie Steinhauer
Antworten
-
Hallo Ottilie,
das tun sie auch, wenn die Datenbank später mit der Anwendung ausgeliefert wird. Dann gibt es nur eine Instanz der Datenbank (in einem Benutzerverzeichnis).
Bei der Entwicklung geht Visual Studio davon aus, dass man die Testendatenbank nicht "verschmutzen" will. Deswegen wird jeweils eine "frische" Kopie in das Verzeichnis kopiert.
Der Datenbank-Explorer wiederum dient zum Entwerfen der Datenbankstruktur und ggf. dem Hinterlegen von Vorgabedaten.
Das ist auch ein Grund für "|DataDirectory|" - Du erinnerst sicher noch: Working with local databases
(Hier vor allem: Where is my data? -- Understanding the file copy for desktop projects)
Gruß Elmar
- Als Antwort vorgeschlagen Ionut DumaModerator Dienstag, 21. Mai 2013 15:09
- Als Antwort markiert ottilie Dienstag, 21. Mai 2013 16:13
Alle Antworten
-
Trotzdem findet sich die Zeile nicht in der Tabelle.
Hallo Ottilie,
so eine richtige SQL Server (Express) bezogene Frage ist es nicht gerade, sondern eher eine in Richtung .NET/Ado.NET; ein entsprechend anders Forum ware besser geeignet für die Frage. Aber ich kenne da einen, der auch hier mitliest und wie immer die Frage bestens beantworten kann & wird ...;-)
Mit meinen nicht ganz so kompetenten Kenntnissen: Ein DataSet/DataAdapter arbeitet offline, wenn Änderungen an den Daten an die Datenquelle übertragen werden, muss man das explizit initiieren; siehe Gewusst wie: Ausführen eines Commit für Änderungen in einem Dataset; ob nun SQL Server oder Compact, das Prinzip ist immer gleich.
Olaf Helper
Blog Xing -
Hallo Elmar,
vielen Dank für Deine schnelle Antwort. Den Aufruf ta.Fill(ds.Test); hatte ich noch nicht. Seither wird in der Tabelle tatsächlich die Zeile
angezeigt, bei mehrfachem Aufruf auch mehrfach. Schaue ich aber via ServerExplorer in der Tabelle nach, ist dort nichts. Erneuter Aufruf des Programms zeigt dann aber auch nur die neu eingefügte Zeile, alle anderen sind nicht mehr da.
-
Hallo Ottilie,
wenn Du die Datenbank in das Projekt eingebunden hast, musst Du darauf achten, in die "richtige" Datenbank-Datei zu schauen.
Zur Laufzeit wird die Datenbankdatei in das Programmverzeichnis (bin\Debug) kopiert und die Anwendung verändert diese.
Während im Datenbank-/Server-Explorer die Datenbankdatei im Projektverzeichnis angezeigt wird. Die behält ihren Originalzustand.
Gruß Elmar
-
Hallo Elmar,
jetzt bin ich aber nicht schlau geworden. Die Daten sollen nicht nur temporär eingefügt und im datagrid angezeigt werden, sie sollen hinterher in der Datenbank dauerhaft gespeichert werden. Und das funktioniert eben nicht. Die Daten müsssten also im Datenbank/Server-Explorer erscheinen, mindestens nach Schließen der Anwendung.
Gruß
Otti
-
Hallo Ottilie,
das tun sie auch, wenn die Datenbank später mit der Anwendung ausgeliefert wird. Dann gibt es nur eine Instanz der Datenbank (in einem Benutzerverzeichnis).
Bei der Entwicklung geht Visual Studio davon aus, dass man die Testendatenbank nicht "verschmutzen" will. Deswegen wird jeweils eine "frische" Kopie in das Verzeichnis kopiert.
Der Datenbank-Explorer wiederum dient zum Entwerfen der Datenbankstruktur und ggf. dem Hinterlegen von Vorgabedaten.
Das ist auch ein Grund für "|DataDirectory|" - Du erinnerst sicher noch: Working with local databases
(Hier vor allem: Where is my data? -- Understanding the file copy for desktop projects)
Gruß Elmar
- Als Antwort vorgeschlagen Ionut DumaModerator Dienstag, 21. Mai 2013 15:09
- Als Antwort markiert ottilie Dienstag, 21. Mai 2013 16:13
-
Hallo Elmar,
erstmal ganz herzlichen Dank für die ausführliche Hilfe. Das hat mir schon sehr weiter geholfen. Dies ist für mich das erste Projekt mit SQLServerCompact und mir kommen immer viele Fragen.
Nur um ganz sicher zu gehen, dass ich alles richtig verstanden habe: VisualStudio erstellt eine Arbeitskopie der Datenbank und legt sie in Projektname ->bin ab. Nur diese Kopie wird verwendet. Sie behält Ihre Daten auch über VisualStudio schließen und/oder Computer neu starten (habe ich alles ausprobiert) Lediglich, falls ich die Tabelle im ServerExplorer öffne, wird die Kopie mit dieser Tabelle überschrieben, in diesem Fall geleert, weil die Tabelle im ServerExplorer leer ist.
Wird das Programm mit Installer ausgeliefert, besitzt es nur eine Datenbank, die dann gefüllt werden kann und die Daten dauerhaft speichert. Soweit zumindest in der Theorie OK?
Gruß
Otti
- Bearbeitet ottilie Donnerstag, 16. Mai 2013 09:52