Avatar billede noobsaibot Nybegynder
25. marts 2005 - 12:24 Der er 15 kommentarer og
1 løsning

Få C# til at gemme data i en Assecc Databse

Hej !

Jeg trækker data fra en Access Databse og viser dem i et DataGrid, men jeg vil gerne kunne gemme ændringer i tabellen.
Er der en der gider forklare mig hvordan man gør - helst gerne skåret ud i pap - er nemlig ikke så stiv i C#.
Avatar billede arne_v Ekspert
25. marts 2005 - 12:26 #1
Du kan bede din data adapter om at gemme ændringer.

Eksempel:


using System;
using System.Data;
using System.Data.OleDb;
using System.Drawing;
using System.Windows.Forms;

namespace DefaultNamespace
{
    public class MainForm : Form
    {
        private DataGrid dg;
        private Button save;
        private OleDbConnection con;
        private OleDbDataAdapter da;
        private OleDbCommandBuilder cb;
        private DataSet ds;

        public static void Main()
        {
            MainForm fMainForm = new MainForm();
            fMainForm.ShowDialog();
        }
        public MainForm()
        {
            InitializeComponent();
        }
        private void InitializeComponent()
        {
            con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\Database\\MSAccess\\Test.mdb;");
            con.Open();
            da = new OleDbDataAdapter("SELECT * FROM T1", con);
            cb = new OleDbCommandBuilder(da);
            da.UpdateCommand = cb.GetUpdateCommand();
            ds = new DataSet();
            da.Fill(ds, "T1");
            dg = new DataGrid();
            save = new Button();
            SuspendLayout();
            dg.Location = new Point(50, 50);
            dg.Size = new Size(300, 200);
            dg.SetDataBinding(ds, "T1");
            save.Location = new Point(50, 300);
            save.Size = new Size(100, 25);
            save.Text = "Save";
            save.Click += new EventHandler(SaveClick);
            ClientSize = new Size(400, 400);
            Controls.Add(dg);
            Controls.Add(save);
            Text = "Main Form";
            ResumeLayout(false);
        }
        void SaveClick(object sender, EventArgs e)
        {
            da.Update(ds, "T1");
            ds.AcceptChanges();
            dg.Refresh();
        }
    }
}
Avatar billede noobsaibot Nybegynder
25. marts 2005 - 12:28 #2
vil det sige at jeg bare skal lave det click event? SaveClick?
Avatar billede arne_v Ekspert
25. marts 2005 - 12:32 #3
Eller på anden vis kalde data adapterens Update metode.

Husk dog at data adapteren skal have InsertCommand, UpdateCommand og DeleteCommand.

OleDbCommandBuilder bør lave dem, men hvis det driller så assigner du manuelt som i mit eksempel
Avatar billede noobsaibot Nybegynder
25. marts 2005 - 12:33 #4
Okay - jeg er med vildt godt eksempel. Selv sådan en som mig fatter det! Jeg takker. Hvordan får du dine point?
Avatar billede arne_v Ekspert
25. marts 2005 - 12:34 #5
jeg ligger et svar
Avatar billede noobsaibot Nybegynder
25. marts 2005 - 12:36 #6
Har du fået point nu?
Avatar billede arne_v Ekspert
25. marts 2005 - 12:39 #7
No

Du skal markere mit navn så det bliver blåt ude i combo boxen og så klikke accepter
Avatar billede noobsaibot Nybegynder
25. marts 2005 - 12:55 #8
Hvordan skal jeg gøre, hvis jeg vil ændre data, som jeg viser i en textbox istedet?
Avatar billede arne_v Ekspert
25. marts 2005 - 13:53 #9
Du assigner bare fra din TextBox til et sted i dit DataSet !
Avatar billede noobsaibot Nybegynder
25. marts 2005 - 14:21 #10
Jeg har lavet en Databind til et sted i mit dataset .. Det er ikke det du mener vel? Jeg vil jo gerne ændre den data jeg får vist ..
Avatar billede arne_v Ekspert
25. marts 2005 - 14:24 #11
Selvom du har bindet dit data grid til dit data set mener jeg godt at du
kan opdatere direkte i data set (men du skal nok kalde Refresh metoden på data set).
Avatar billede noobsaibot Nybegynder
25. marts 2005 - 14:31 #12
Jeg har lavet følgende click event:


private void button3_Click(object sender, System.EventArgs e)
        {
            daHaVideo.Update(dsHaVideo1, "Kunder");
            dsHaVideo1.AcceptChanges();
            textBox1.Refresh();
        }


Og data bliver ændret midlertidigt i textboxen, men ikke gemt "permanent"..
Avatar billede arne_v Ekspert
25. marts 2005 - 14:35 #13
Øh

Den kode har vel ikke noget med hverken dit spørgsmål eller mit svar ar gøre ?

click kaldes
den assigner fra TextBox'en til et sted inde i DataSet'et
du kalder Update + Accept + Refresh (og Refresh på din DataGrid ikke på din TextBox)
Avatar billede noobsaibot Nybegynder
25. marts 2005 - 14:51 #14
Jeg kan godt få det til at virke med et DataGrid .. Jeg vil gerne lave det samme nummer med en textbox. Hvordan gør jeg det?
Avatar billede arne_v Ekspert
25. marts 2005 - 14:53 #15
Præcis som beskrevet ovenfor bare uden DataGrid Refresh.
Avatar billede noobsaibot Nybegynder
25. marts 2005 - 15:00 #16
Jeg har startet en anden tråd - hvis du besvarer der så kan du også få point :)

http://www.eksperten.dk/spm/603453

Jeg kan bare ikke helt forstå det ... som sagt er jeg ikke så hård til C#...
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