Avatar billede xenoxsis Nybegynder
16. januar 2011 - 15:00 Der er 5 kommentarer og
1 løsning

Indsættelse i compact database

-----KODE START----

            using (SqlCeConnection c = new SqlCeConnection("Data Source=Database.sdf"))
            {
                c.Open();

                using (SqlCeDataAdapter a = new SqlCeDataAdapter("SELECT * FROM Ingrediens",c)) {
                    DataSet ds = new DataSet();

                    a.Fill(ds);

                    DataRow newRow = ds.Tables[0].NewRow();

                    newRow["navn"] = navnTextBox.Text;
                    newRow["point"] = Math.Round(pointsNumericUpDown.Value);
                    newRow["primær_maengde"] = float.Parse(primaerMaengdeTextBox.Text);
                    newRow["primær_enhed"] = Int32.Parse(primaerMaengdeComboBox.SelectedValue.ToString());
                    newRow["sekundær_maengde"] = float.Parse(sekundaerMaengdeTextBox.Text);
                    newRow["sekundær_enhed"] = Int32.Parse(sekundaerMaengdeComboBox.SelectedValue.ToString());

                    ds.Tables[0].Rows.Add(newRow);

                    ds.AcceptChanges();

                    SqlCeCommandBuilder cb = new SqlCeCommandBuilder(a);
                    a.InsertCommand = cb.GetInsertCommand();

                    a.Update(ds);
                }
                MessageBox.Show("Tilføjet");


-----KODE SLUT----

Hvorfor slår mine ændringer ikke igennem ned i databasen. Hvis jeg refresher det datagridview som viser min data kan den godt se ændringen, men hvis jeg kigger i databasen når jeg har lukket programmet er ændringerne ikke skrevet ind der?

Jeg er relativt ny til C# stadigvæk. Så hvis der er nogen der har en smartere måde at få data ind i en database eller en nemmere må de meget gerne skrive det.

Jeg bruger en Compact SQL local DB kaldet Database.sdf
Avatar billede Syska Mester
16. januar 2011 - 15:28 #1
1.
DataSet ( dit ds ) har ikke som sådan direkte adgang til databasen, det er kun den in Memory repetation af dine data.

Tror ikke a.Update() laver inserts ... kan dog tage fejl, men nok der jeg ville kigge.

Hvis du retter i en row ... laver retter den så de ændringer ?

Btw, i stedet for det du har gang i der, så tag i stedet at kig på en ORM, EntityFramework eller Linq2Sql... synes mer eller mindre aldrig jeg hører om DataAdapter mere ... men jeg kan tage fejl. I min verden er det dødt :-)

mvh
Avatar billede arne_v Ekspert
16. januar 2011 - 15:48 #2
Prøv med en anden rækkefølge:

                    SqlCeCommandBuilder cb = new SqlCeCommandBuilder(a);
                    a.InsertCommand = cb.GetInsertCommand();
                    a.Update(ds);
                    ds.AcceptChanges();
Avatar billede johny Nybegynder
17. januar 2011 - 08:16 #3
Nu ved jeg jo ikke hvordan du kompilerer dit program osv., men det skyldes højst sandsynligt at når du kører det i debug mode, så kopieres din compact database til output directory, og det er så denne du arbejder videre på. Næste gang du kører bliver der så taget en ny kopi og den gamle overskrives.
Avatar billede arne_v Ekspert
03. marts 2011 - 03:33 #4
xeno??
Avatar billede xenoxsis Nybegynder
26. maj 2011 - 14:54 #5
Undskyld mit meget sene svar. Jeg valgte at opgive SDF og gå over til at lave en MDF i stedet for. Det virker ganske glimrende.
Avatar billede arne_v Ekspert
27. maj 2011 - 00:40 #6
Der er ikke noget i den kode som skulle give forskel paa SQLServer og SQLServerCE.

Saa hvis problemet forsvandt af sig selv, saa var #3 nok det rigtige bud.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester