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?
Annonceindlæg tema
Offentlig digitalisering
Fra effektivisering til digital suverænitet. Hvordan skaber det offentlige en digital fremtid med AI, sikkerhed og kontrol i centrum?
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(); } } }
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.
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 :-)
25. marts 2005 - 15:27
#4
arne_V - nu bliver der tilføjet en ny række ... Jeg vil gerne bare rette i databasen.
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).
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(); } } }
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.
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();
10. april 2005 - 17:20
#9
OK ?
11. april 2005 - 00:04
#10
Jeg siger tak!
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.