Avatar billede noobsaibot Nybegynder
25. marts 2005 - 13:27 Der er 8 kommentarer og
2 løsninger

Få C# til at gemme data i en Access Databse ved visning i Textbox

Nå troede lige jeg selv kunne finde ud af det...

Men mit problem er at jeg gerne vil vise nogle data i en textbox og samtidig kunne ændre disse data og gemme ændringen i Access Databasen..

Jeg kan godt "refresh" ændringerne så de fremgår i textboxen, men når jeg starter programmet igen er ændringen væk ...

Hvordan gør jeg?
Avatar billede arne_v Ekspert
25. marts 2005 - 15:10 #1
Sådan noget kan jo laves på en million måder, men her er et 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 TextBox tb1;
        private TextBox tb2;
        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=C:\\Databases\\MSAccess\\Test.mdb;");
            con.Open();
            da = new OleDbDataAdapter("SELECT * FROM T1", con);
            cb = new OleDbCommandBuilder(da);
            da.InsertCommand = cb.GetInsertCommand();
            ds = new DataSet();
            da.Fill(ds, "T1");
            dg = new DataGrid();
            tb1 = new TextBox();
            tb2 = new TextBox();
            save = new Button();
            SuspendLayout();
            dg.Location = new Point(50, 50);
            dg.Size = new Size(300, 200);
            dg.SetDataBinding(ds, "T1");
            tb1.Location = new Point(50, 300);
            tb1.Size = new Size(75, 25);
            tb2.Location = new Point(150, 300);
            tb2.Size = new Size(75, 25);
            save.Location = new Point(250, 300);
            save.Size = new Size(75, 25);
            save.Text = "Save";
            save.Click += new EventHandler(SaveClick);
            ClientSize = new Size(400, 400);
            Controls.Add(dg);
            Controls.Add(tb1);
            Controls.Add(tb2);
            Controls.Add(save);
            Text = "Main Form";
            ResumeLayout(false);
        }
        void SaveClick(object sender, EventArgs e)
        {
            string[] val = new string[2];
            val[0] = tb1.Text;
            val[1] = tb2.Text;
            ds.Tables["T1"].Rows.Add(val);
            da.Update(ds, "T1");
            ds.AcceptChanges();
            dg.Refresh();
        }
    }
}
Avatar billede arne_v Ekspert
25. marts 2005 - 15:12 #2
Jeg bruger stadigvæk en DataGrid til at vis edata, men det er kun fordi jeg er doven.

Kernen er:

            string[] val = new string[2];
            val[0] = tb1.Text;
            val[1] = tb2.Text;
            ds.Tables["T1"].Rows.Add(val);
            da.Update(ds, "T1");
            ds.AcceptChanges();

hvor man opdaterer DataSet'et udfra TextBox'ene og får DataAdapter'en til at
skrive den nye række ned i databasen.
Avatar billede fyrenanders Nybegynder
25. marts 2005 - 15:14 #3
kik i min kommentar på dit første spørgsmål!

til denne klasse lav en funktion.

public void retidatabase(string QUERY)
{
Query= data.sqlupdate();
OleDbCommand command = new OleDbCommand(Query,connect);
connect.Open();
command.ExecuteNonQuery();
connect.Close();   
return true;
}

lav Queryes udfra hvad der står i din teksbox (på din eventhandler for hvornår det nu skal aktiveres).

håber det hjælper :-)
Avatar billede noobsaibot Nybegynder
25. marts 2005 - 15:27 #4
arne_V - nu bliver der tilføjet en ny række ... Jeg vil gerne bare rette i databasen.
Avatar billede noobsaibot Nybegynder
25. marts 2005 - 15:28 #5
fyrenanders - jeg er ikke så god til C# ... for at være helt ærlig fatter jeg bjælle af hvad der står (det er jo nok rigtigt - er bare ikke med).
Avatar billede arne_v Ekspert
25. marts 2005 - 15:45 #6
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 TextBox tb;
        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=C:\\Databases\\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();
            tb = new TextBox();
            save = new Button();
            SuspendLayout();
            dg.Location = new Point(50, 50);
            dg.Size = new Size(300, 200);
            dg.SetDataBinding(ds, "T1");
            tb.Location = new Point(50, 300);
            tb.Size = new Size(100, 25);
            save.Location = new Point(200, 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(tb);
            Controls.Add(save);
            Text = "Main Form";
            ResumeLayout(false);
        }
        void SaveClick(object sender, EventArgs e)
        {
            for(int i = 0; i < ds.Tables["T1"].Rows.Count; i++)
            {
                if(dg.IsSelected(i))
                {
                    ds.Tables["T1"].Rows[i]["F2"] = tb.Text;
                }
            }
            da.Update(ds, "T1");
            ds.AcceptChanges();
            dg.Refresh();
        }
    }
}
Avatar billede arne_v Ekspert
25. marts 2005 - 15:46 #7
Du markerer rækker i datagridet og indtaster en værdi i textboxen og klikker
save og alle seleceted rækker for ændret værdien.
Avatar billede arne_v Ekspert
25. marts 2005 - 15:48 #8
Men måske er det anders's løsning du leder efter:

OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Databases\\MSAccess\\Test.mdb;");
con.Open();
OleDbCommand cmd = new OleDbCommand("UPDATE T1 SET F2 = '" + tb2.Text + "' WHERE F1=" + tb1.Text, con);
cmd.ExecuteNonQuery();
con.Close();
Avatar billede arne_v Ekspert
10. april 2005 - 17:20 #9
OK ?
Avatar billede noobsaibot Nybegynder
11. april 2005 - 00:04 #10
Jeg siger tak!
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