Laden...

Problem bei schreiben in Datenbank

Erstellt von XenoLith vor 14 Jahren Letzter Beitrag vor 13 Jahren 8.807 Views
X
XenoLith Themenstarter:in
59 Beiträge seit 2009
vor 14 Jahren
Problem bei schreiben in Datenbank

Update/Edit:
Achtung Bitte ab hier lesen:
link führt euch ein paar posts tiefer da sich einiges geändert hat.


verwendetes Datenbanksystem: <SQL Express>

Hallo,
Ich bekomm es nicht hin Daten in eine Datenbank zu schreiben bzw. zu löschen.
Nach Programmneustart werden im DataGridView immer wieder die von Hand in die Datenbank geschrieben Werte angezeigt.

Hier mal mein Quellcode:


        DataTable table = new DataTable();
        DataSet dataset = new DataSet();
        SqlDataAdapter dataAdapter = new SqlDataAdapter();

        String connectionString = Properties.Settings.Default.Database1ConnectionString;

        int active_row;
        const string select_const = "select * from Table1";
...
        private void GetData()
        {
            dataset.Clear();
            SqlConnection connectionString2 = new SqlConnection(Properties.Settings.Default.Database1ConnectionString);
            dataAdapter.SelectCommand = new SqlCommand(select_const, connectionString2);
            dataAdapter.Fill(dataset, "Table1");
            bindingSource1 = new BindingSource(dataset, "Table1");
            dataGridView1.DataSource = bindingSource1;
        }

        private void SetData()
        {
            SqlCommandBuilder cb = new SqlCommandBuilder(dataAdapter);
            dataAdapter.Update(dataset.Tables["Table1"]);
        }

        private void DeleteRows()
        {
            try
            {
                string delete_const = "delete from Table1 where Firma = '" + textBox2.Text + "'" + "and Adresse ='" 
                                                                            + textBox3.Text + "'" + "and PLZ  ='" 
                                                                            + textBox4.Text + "'" + "and Ort  ='" 
                                                                            + textBox7.Text + "'";
                SqlConnection connectionString2 = new SqlConnection(Properties.Settings.Default.Database1ConnectionString);
                dataAdapter.SelectCommand = new SqlCommand(delete_const, connectionString2);
                dataAdapter.Fill(dataset, "Table1");
                bindingSource1 = new BindingSource(dataset, "Table1");
                dataGridView1.DataSource = bindingSource1;
            }
            catch (SqlException)
            {
                MessageBox.Show("Datenbank nicht gefunden");
            }
        }

        private void InsertData()
        {
            try
            {
                string insert_into = "INSERT INTO Table1 (Firma, Adresse, PLZ, Ort) Values ('" + textBox2.Text + "','" + textBox3.Text + "','" + textBox4.Text + "','" + textBox7.Text + "')";
                SqlConnection connectionString2 = new SqlConnection(Properties.Settings.Default.Database1ConnectionString);
                dataAdapter.SelectCommand = new SqlCommand(insert_into, connectionString2);
                dataAdapter.Fill(dataset, "Table1");
                bindingSource1 = new BindingSource(dataset, "Table1");
                dataGridView1.DataSource = bindingSource1;
                bindingSource1.EndEdit();
                SetData();
            }
            catch (SqlException)
            {
                MessageBox.Show("Datenbank nicht gefunden");
            }
            
        }

War jetzt vielleicht etwas viel Code danke das du dir trotzdem die Zeit genommen hast!

Gruß Xenolith

1.564 Beiträge seit 2007
vor 14 Jahren

Hallo XenoLith

Erstmal willkommen bei myCSharp.de 😃

Du meinst mit "Verwendetes Datenbanksystem" wohl SQL Server. ADO.NET ist nur der Provider und gilt als Interface für alle Datenbanksysteme die mit .NET angesprochen werden.

Zu dem dir aufgefallenen Problem:
Ich nehme mal an du arbeitest mit der SQL Server Express Edition und hast deine Datenbank über AttachFile im Connection-String angegeben. Wenn du die Datenbank als "Datei" in deinem Projekt eingebunden hast musst du sicherstellen, dass die Datei nicht bei jedem Kompilieren wieder in das ".\bin" Verzeichnis kopiert wird. Rechtsklick auf die Datei -> Eigenschaften und umstellen.

Du solltest jedoch dringend SqlParameter für die Werte in deinen SQL Statements verwenden. Hier findest du einen ausführlichen Artikel von juetho zu dem Thema:
[Artikelserie] Parameter von SQL Befehlen

Bitte lies dir auch meinen zweitem Beitrag in folgendem Thread durch um zu verstehen warum das so wichtig ist:
[GELÖST] ungewollte zeichen (z.B. ' ) in einem sql befehl

Grüße
Flo

Blog: Things about Software Architecture, .NET development and SQL Server
Twitter
Google+

Je mehr ich weiß, desto mehr weiß ich was ich noch nicht weiß.

X
XenoLith Themenstarter:in
59 Beiträge seit 2009
vor 14 Jahren

Vielen Dank für deine Hilfe:)

Ich meinte natürlich SQL;)

Die im Projektordner eingebundene Datenbank steht auf "kopieren wenn neuer"

Die links werde ich jetzt erstmal in Ruhe durcharbeiten.

Gruß Xenolith

X
XenoLith Themenstarter:in
59 Beiträge seit 2009
vor 14 Jahren

Also wenn ich das richtig verstanden habe SQL-Queries NIEMALS als string zusammenbasteln sondern immer über nen SQLComanndBuilder bzw. SQlCommand also so:


                SqlCommand insert_into = new SqlCommand("INSERT INTO Table1 (Firma, Adresse, PLZ, Ort) Values (" + textBox2.Text + "," 
                                                                                                    + textBox3.Text + "," 
                                                                                                    + textBox4.Text + "," 
                                                                                                    + textBox7.Text);


Geht leider nicht ganz so da SqlCommand nen string haben will (insert_into muss vom Typ string sein).

dataadapter.SelectCommand = new SqlCommand(insert_into,connectionString2);

Kennt einer von euch ne Seite die das mit den Datenbankenzugriff in Viusal Studio so von grundauf erklärt?

Hab meine Funktion mal etwas "schöner" Programmiert sofern das möglich ist wenn man absolut keine ahnung von Datenbanken hat

        public void InsertData(string Firma, string Adresse, string PLZ, string Ort)
        {  
            try
            {
                SqlConnection connectionString2 = new SqlConnection(Properties.Settings.Default.Database1ConnectionString);
                SqlCommand insert_into = new SqlCommand("INSERT INTO Table1 (Firma, Adresse, PLZ, Ort) Values ("+Firma+","+Adresse+","+PLZ+","+Ort+")");
                insert_into.Connection = connectionString2;
                insert_into.Connection.Open();
                insert_into.BeginExecuteNonQuery();
            }
            catch (SqlException)
            {
                MessageBox.Show("Datenbank nicht gefunden");
            }
        }
5.299 Beiträge seit 2008
vor 14 Jahren

Kennt einer von euch ne Seite die das mit den Datenbankenzugriff in Viusal Studio so von grundauf erklärt?

Nicht wirklich. Der Datenbankzugriff ist ja auch nur die halbe Miete, und schon da kommts sehr drauf an, was man machen will.

Der "raw"-Datenbankzugriff geht ungefähr so:
mit einer Connection und Parametern kann man ein Command basteln. Das kann man mit

var reader = command.ExecuteReader();

abfahren, und kann dann datensatz-weise die Werte lesen.

Das ist aber eine ziemlich unprogrammierbar, weil die Werte nur vom Typ Objekt sind.
Man hätte lieber typisierte Daten-Objekte, wo ein Datum ein Datum ist, und ein Integer ein Integer etc.
Da kann man sich per LinqToSql Datenklassen erstellen, oder indem man sich ein typisiertes Dataset generiert.

Also Grundsatz-Entscheidung: Dataset (=ADO.Net) oder Linq2Sql?
Bei L2S kriegt man mittm DataContext zu tun, der sich um den Raw-Teil kümmert.

Bei Dataset sind im Dataset DataTables drin, die per DataAdapter befüllt werden. Beim typisierten Dataset kriegt man passende TableAdapter mit-generiert, sodaß man auch da mittm Raw-Teil kaum noch zu tun hat.

Wie gesagt: das war alles nur die halbe Miete. Die andere Hälfte ist ein ordentliches Datenbank-Modell.

Die Nummer mittm Dataset kannstedir auf Movie-Tuts in verschiedenen Varianten angugge. Inkl. bischen DB-Theorie.

Da sind aber schon einige Grundsatz-Entscheidungen gefällt:
Clientseitige Primkey-Generierung (statt serverseitig), Access (naja, SQLServer ginge genau so), typisiertes Dataset, Verwendung generierter TableAdapter (Man kann nämlich auch zur Laufzeit mittm CommandBuilder DataAdapter konfigurieren, statt die generierten Dinger zu verwenden.).

Der frühe Apfel fängt den Wurm.

1.564 Beiträge seit 2007
vor 14 Jahren

Also wenn ich das richtig verstanden habe SQL-Queries NIEMALS als string zusammenbasteln sondern immer über nen SQLComanndBuilder bzw. SQlCommand also so:

Ähm... nö. 👅 Du baust ja trotzdem die Werte direkt in den String ein, nur das du den String direkt dem Command übergibst. Wenn du dir die beiden Threads durchgelesen hättest die ich rausgesucht habe wäre eher so was rausgekommen:

         string sql = @"INSERT INTO Table1 (Firma, Adresse, PLZ, Ort) 
                        VALUES (@Firma, @Adresse, @Plz, @Ort";

         using (SqlConnection cn = new SqlConnection("deinConnectionString"))
         using (SqlCommand cmdInsert = new SqlCommand(sql))
         {
            cmdInsert.Parameters.AddWithValue("@Firmat", textBox1.Text);
            cmdInsert.Parameters.AddWithValue("@Adresse", textBox3.Text);
            cmdInsert.Parameters.AddWithValue("@Plz", textBox4.Text);
            cmdInsert.Parameters.AddWithValue("@Ort", textBox7.Text);
            cmdInsert.ExecuteNonQuery();
         }

Du solltest übrigens dringend mal die Namen deiner Controls anpasse, textBox1 - textBox20 wird dir in ein paar Wochen sicher nichts mehr sagen. Außerdem sollte die Datenschicht sowieso nicht im GUI eingebaut sein. Schau dir mal den Link vom ErfinderDesRades an. Am besten steigst du vom Low-Level Datenzugriff auf typisierte DataSets oder LINQ2SQL um, das ist erstens der korrekte Weg und zweitens wesentlich einfacher. Da musst du fast keine SQL Statements bauen.

Grüße
Flo

Blog: Things about Software Architecture, .NET development and SQL Server
Twitter
Google+

Je mehr ich weiß, desto mehr weiß ich was ich noch nicht weiß.

3.825 Beiträge seit 2006
vor 14 Jahren

Hallo Xenolith,

einige Grundlagen zum Datenbankzugriff unter .NET :

http://www.seven-c.de/files/Datenbankenhowto.htm

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

X
XenoLith Themenstarter:in
59 Beiträge seit 2009
vor 14 Jahren

Ich hab jetzt nochmal von ziemlich weit vorne angefangen um jetzt ausschließlich auf typisiertes DataSet zuzugreifen und dieses mittels Dataadapter zu Updaten etc...

Mit diesem Befehl lade ich erfolgreich meine Tabelle ins DGV

this.table1TableAdapter.Fill(this.strykerDataSet.Table1);

Wenn ich das richtig verstanden habe müsste ich jetzt mittels:

this.table1TableAdapter.Update(this.strykerDataSet.Table1);

Die Datenbank Updaten können! das geht jedoch nicht...

1.564 Beiträge seit 2007
vor 14 Jahren

Hallo XenoLith

Hat deine Tabelle einen Primary Key?

Grüße
Flo

Blog: Things about Software Architecture, .NET development and SQL Server
Twitter
Google+

Je mehr ich weiß, desto mehr weiß ich was ich noch nicht weiß.

X
XenoLith Themenstarter:in
59 Beiträge seit 2009
vor 14 Jahren

Ja! Hat nen PrimaryKey

Der Assistent vom DataAdapter sagt mir auch das alles okay ist (siehe Bild).

Hier mal ein Bild:
Klick mich!!!

X
XenoLith Themenstarter:in
59 Beiträge seit 2009
vor 14 Jahren

Hallo,
Ich hab mittlerweile einiges geändert und mal ein paar Screenshots gemacht.
Mein Problem ist wie gesagt das ich nicht in eine Datenbank schreiben kann bzw. es werden anscheinend keine Daten übernommen. Ich nutze einen SQLCompact Server.

Ich kann ohne Probleme Daten aus der Datenbank auslesen das funktioniert mit diesem Befehl:

        private void button1_Click(object sender, EventArgs e)
        {            
            this.table1TableAdapter.Fill(this.strykerDataSet.Table1); 
        }

Vom Versuch geänderte Datensätze zu Updaten lässt sich die Datenbank nicht beeindrucken. Geschweige denn von Inserts. Es wird allerdings KEINE Fehlermeldung etc. ausgegeben.

        private void button2_Click(object sender, EventArgs e)
        {   
            this.table1TableAdapter.InsertQuery("heavy", "on", "the", "woodway");
            strykerDataSet.AcceptChanges();           
            this.table1TableAdapter.Update(this.strykerDataSet.Table1);  //die Methode Fill() Funktioniert diese hier nicht!
        }

Hier jetzt mal ein paar Bilder:
www.contragaming.de/code2.jpg

Ich bin ratlos.. ?(

Gruß Xenolith

PS: Ich würde gerne einen neuen Thread aufmachen der hier wird langsam total unübersichtlich und das Problem ist auch nicht mehr das gleiche wie im FirstPost.
Allerdings fürchte ich dann wegen Double/Crossposting gehängt zu werden.

5.299 Beiträge seit 2008
vor 14 Jahren

Bei de Arbeit mitte generierten Dinger ist die DB oft ins Projekt eingebunden, mit der Datei-Eigenschaft "Ins Ausführungsverzeichnis kopieren - immer".
D.H., bei jedem Testlauf kriegst du eine Kopie der Original-DB.
Wenn man nun denkt, mit nem neuen Testlauf könne man die Eingaben des vorherigen Testlaufes angucken - ist das ein Irrtum.
Empfehlung: Mach einen ReLoad-Button aufs Form, mit dem du im selben Testlauf die Daten holen kannst, wenn du willst.
Findich bischen sauberer als die Datei-Eigenschaft "Ins Ausführungsverzeichnis kopieren - " umzustellen, und testet auch schneller.

Der frühe Apfel fängt den Wurm.

X
XenoLith Themenstarter:in
59 Beiträge seit 2009
vor 14 Jahren

"Ins Ausführungsverzeichnis kopieren - immer" <-diese Option ist bereits auf "Kopieren wenn neuer" Umgestellt

Den Button gibt es bereits... Hilft mir aber auch nicht beim verändern von Daten 😁

X
XenoLith Themenstarter:in
59 Beiträge seit 2009
vor 14 Jahren

Interessant ist das wenn ich die Im DataSet Designer rechte Maustaste auf die Abfragen klicke und dann ->Konfigurieren->Abfragen Generator->Abfrage ausführen klicke die Datenbank geändert wird! Ich hab so alle meine Abfragen getestet und tadaa Sie funktionieren! Aber eben nur im DataSet Editor...
*verzweifeltimkreisrenn*

T
111 Beiträge seit 2005
vor 14 Jahren

Hallo XenoLith

Du hast folgenden Code für das Update verwendet:


            this.table1TableAdapter.InsertQuery("heavy", "on", "the", "woodway");
            strykerDataSet.AcceptChanges();
            this.table1TableAdapter.Update(this.strykerDataSet.Table1)

Wenn Du ein AcceptChanges auf eine Tabelle / Dataset machst, dann setzt Du alle Rowstates auf "normal" zurück. Der Updatebefehl schaut aber bei jedem Datensatz auf dieses Flag und schreibt nur die Datensätze zurück, bei denen es auf "geändert" oder "neu" steht. Probier es mal ohne diese Zeile, dann müsste es klappen.

lG
Thomas

X
XenoLith Themenstarter:in
59 Beiträge seit 2009
vor 14 Jahren
        private void button1_Click(object sender, EventArgs e)
        {
            dataGridView1.EndEdit();
            table1BindingSource.EndEdit();
            strykerDataSetBindingSource.EndEdit();

            int querycounter = this.table1TableAdapter.InsertQuery("heavy", "on", "the", "woodway");
                   
            int querycounter2 = this.table1TableAdapter.Update(this.strykerDataSet.Table1);
            strykerDataSet.AcceptChanges();
        }

Die Datenbank wird noch immer nicht geändert...
querycounter und querycounter2 haben jeweils den Wert 1.

J
3.331 Beiträge seit 2006
vor 14 Jahren

Ich nutze einen SQLCompact Server.

Schön, dass diese Angabe jetzt schon kommt. Dafür ist der SqlServerCe-Provider zuständig; du darfst also keine Sql-Klassen benutzen, sondern musst auf SqlCe-Klassen umsteigen.

Du wurdest ganz am Anfang nach dem verwendeten Datenbanksystem gefragt. Hättest du dann nicht auf den Gedanken kommen können, vollständig zu antworten?

Ergänzung zu Thomas' Hinweis: AcceptChanges ist entgegen dem üblichen Sprachgebrauch keine Bestätigung des Benutzers an das Programm, dass die Änderungen gültig seien und zu speichern sind. Es handelt sich vielmehr um die Feststellung des Programmierers für das DataSet, dass die Änderungen erledigt sind und bei späterem Update nicht mehr beachtet werden sollen.

Jürgen

X
XenoLith Themenstarter:in
59 Beiträge seit 2009
vor 14 Jahren

Ich nutze einen SQLCompact Server.
Schön, dass diese Angabe jetzt schon kommt.

Jürgen

Zu meiner Verteidigung möchte ich erwähnen das ich vorher einen SQLExpress Server verwendet habe. Erst mit dem von dir zitierten Post bin ich auf SQLCompact umgestiegen.

Wenn der Rückkehrcode nach dem DataAdapter.Update einen Wert größer 0 anzeigt und auch keinen Fehler auslöst, so sind die Daten auch in der Datenbank geändert. Zumindest bin ich immer davon ausgegangen!

ToDo list für mich:
-auf SqlServerCe-Provider umstellen
-Überprüfen ob ich die richtige Datenbank auslese (und nicht etwa immer das unveränderte Original)

Vielen Dank für deine Hilfe

3.825 Beiträge seit 2006
vor 14 Jahren

Hallo Xenolith,

ein Beispiel mit SQL Server Compact : http://www.seven-c.de/files/Datenbankenhowto.htm#9

Ein Beispiel mit Daten ändern mit SQL Server : http://www.seven-c.de/files/Datenbankenhowto.htm#5

Zusammenbauen musst Du selber (Daten ändern mit SQL Compact).

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

X
XenoLith Themenstarter:in
59 Beiträge seit 2009
vor 14 Jahren

Hallo Xenolith,

Zusammenbauen musst Du selber (Daten ändern mit SQL Compact).

Grüße Bernd

Also eigentlich macht das der tableAdapter doch für mich (SQl-Befehls generierung etc.) oder hab ich das falsch verstanden?

3.825 Beiträge seit 2006
vor 14 Jahren

Ja, aber Du musst in meinem Beispiel (Kapitel 6) SqlCommand ersetzen durch SqlCeCommand etc.

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

X
XenoLith Themenstarter:in
59 Beiträge seit 2009
vor 14 Jahren

Ja, aber Du musst in meinem Beispiel (Kapitel 6) SqlCommand ersetzen durch SqlCeCommand etc.

Grüße Bernd

Nein muss man nicht! Der Befehl um einen Datensatz in die Datenbank zu schreiben wird vom TableAdapter automatisch erstellt alternativ kann man sich im DataSetDesigner seine eigenen SQL Funktionen zusammen klicken!

Hier der vom DatasetDesigner generierte Insert Befehl:

INSERT INTO [Table1] ([_Firma], [_Adresse], [_PLZ], [_Ort]) VALUES (@p1, @p2, @p3, @p4)

Und so wird der Befehl im Quellcode aufgerufen:

this.table1TableAdapter.Insert("no longer", "on", "the", "woodway");

Weitere Code ist nicht erforderlich! Also auch kein Open() oder Close() etc. Das übernimmt alles der tableAdapter für euch.

Und jetzt zu dem Fehler der sich bei mir eingeschlichen hat:
Aus irgendwelchen Gründen wird die Datenbank obwohl sie auf ("ins Ausgabeverzeichnis kopieren" = "Nur wenn neuer") steht bei jedem Compiliervorgang überschrieben. Wenn man die .exe direkt aus dem Debugordner aufruft geht es ohne Probleme.

Naja egal auf jedenfall funktioniert es jetzt soweit;)

5.299 Beiträge seit 2008
vor 14 Jahren

Empfehlung: Mach einen ReLoad-Button aufs Form, mit dem du im selben Testlauf die Daten holen kannst, wenn du willst.
Findich bischen sauberer als die Datei-Eigenschaft "Ins Ausführungsverzeichnis kopieren - " umzustellen, und testet auch schneller.

Den Button gibt es bereits... Hilft mir aber auch nicht beim verändern von Daten 😄

Dann wunderts mich, dass dein Reload-Button auch nicht funktionierte.

Der frühe Apfel fängt den Wurm.

X
XenoLith Themenstarter:in
59 Beiträge seit 2009
vor 14 Jahren

Reload geht wunderbar!

        private void GetData()
        {
            strykerDataSet.Clear();
            this.table1TableAdapter.Fill(this.strykerDataSet.Table1);
        }
C
3 Beiträge seit 2010
vor 13 Jahren

Hallo zusammen,

ich habe ein ähnliches Problem. Um dieses zu lösen habe ich jetzt seit ca. einer Woche sehr sehr viele Foren durchgelsen MSDN intensiv durchstöbert und unzählige Tutorials versucht nachzuvollziehen. Mein Problem scheint häufiger aufzutreten, aber die Lösungen, die ich bis jetzt gefunden habe, funktionieren nicht.

Das Problem:
Ich verwende MS SQL Compact 3.5 und will "eigentlich nur" Daten in die Tabelle zurückschreiben. In meinem DataTable Objekt sind alle Änderungen enthalten. Dann übergebe ich das DataTable an meinen DataAdapter als Argument für das Update. Diese Änderungen kommen jedoch nie in Tabelle an.

Mein Code:


         private void button1_Click(object sender, EventArgs e)
        {
            int nPower = 10;
            ANOVA.Laguerre myLaguerre = new ANOVA.Laguerre();
            double[,] myRoots = myLaguerre.GetRootsLaguerre(nPower);

            anovaDataSetTableAdapters.laguerrerootsTableAdapter myAdapter = new WindowsFormsApplication1.anovaDataSetTableAdapters.laguerrerootsTableAdapter();

            myAdapter.Connection.Open();
            anovaDataSet.laguerrerootsDataTable myDataTable = new anovaDataSet.laguerrerootsDataTable();
            anovaDataSet.laguerrerootsRow myNewRow;

            for (int iCounter = 0; iCounter < nPower; iCounter++)
            {
                myNewRow = myDataTable.NewlaguerrerootsRow();
                myNewRow.lrgrad = nPower;
                myNewRow.lrroot = (float)(myRoots[iCounter, 0]);
                myNewRow.lrweight = (float)(myRoots[iCounter,1]);
                myDataTable.Rows.Add(myNewRow);
            }

            myAdapter.Update(myDataTable);
            myAdapter.Connection.Close();
        }

Herzlichen Dank!

F
10.010 Beiträge seit 2004
vor 13 Jahren
  1. Open/Close ist nicht nötig, das macht dr adapter selber.

  2. Du bist sicher, das du in die richtige SqlC Datenbank schaust, und nicht immer die im Debugordner überschreibst?

C
3 Beiträge seit 2010
vor 13 Jahren

Wenn ich im Datenbank-Explorer die Tabelle anklicke und mir die Daten anzeigen lasse, ist die Tabelle leer. Hole ich mir ihre Daten aber in eine DataTable, dann sind die Daten drinnen, wobei diese (gefühlt zufällig) immer wieder gelöscht werden. Anscheind stehen sie im Arbeitsspeicher aber noch nicht fest in der Tabelle.

F
10.010 Beiträge seit 2004
vor 13 Jahren

Das Thema ist hier ziemlich oft beschrieben.

Du hast die DB Datei in deinem Projekt. In den Eigenschaften steht "copy always".
Die DB ist leer, und da schaust du mit dem Explorer rein.
Zum Debugstart copiert VS.NET diese leere Datei ins Ausführungscverzeichnis.

"copy always" ändern und in die richtige DB schauen hilft dann.

C
3 Beiträge seit 2010
vor 13 Jahren

Ja, das mit dem Ausgabeverzeichnis habe ich nicht nur hier schon häufig gelesen.
Bevor ich hier gepostet habe, habe ich ziemlich viele Foren durchforstet.
Ich habe auch dafür schon sämtliche Einstellungen durchprobiert. Trtozdem werden die Daten dauernd gelöscht.

Ich hab auch schon viel mit Datenbanken programmiert, zwar nicht in C#, aber so ein hartnäckiges Problem hatte ich bis jetzt noch nicht.

3.825 Beiträge seit 2006
vor 13 Jahren

Einfach die Datenbank woanders hinlegen, z.B. nach c:\

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

F
10.010 Beiträge seit 2004
vor 13 Jahren

@ColMax:
Kann nicht sein.
Entweder die DB wird durch VS.NET beim Debugstart überschrieben, oder DU machst es selber.
Eine andere Möglichkeit gibt es nicht.

Ach ja, der ServerExplorer schaut immer in die DB im Projekt, Du schreibst aber in die DB im Debug/Release Verzeichnis.
Da kann nie das selbe drin stehen.