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 fra Barco
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.