Avatar billede cdull Nybegynder
21. oktober 2004 - 09:48 Der er 16 kommentarer og
1 løsning

Hente data fra Mysql db

Jeg har connected til min Mysql database med ByteFX, og kan skrive data i min db.

Nu er problemet så bare hvordan jeg henter data fra databasen, og hvordan jeg får det vist i mit program.

dette er min kode til at skrive til db.

using System;
using ByteFX.Data.MySqlClient;

namespace FilmProgramVs3
{
    /// <summary>
    /// Summary description for movies.
    /// </summary>
    public class movies
    {
       

        public movies()
        {
            //
            // TODO: Add constructor logic here
            //
        }

        public void InsertRow(string ArgTitelBox, string ArgAarBox, string ArgBeskrivelseBox, string ArgSkrevetAfBox)
        {
           
       
           
            string hej1;

            hej1= "Database=nope;Data Source=....;User Id=nope;Password=nope";
           
           
            MySqlConnection myConnection = new MySqlConnection(hej1);
            string myInsertQuery = "INSERT INTO VisningFilm (Titel, Aar, FilmBeskrivelse, PostetAf) Values('" + ArgTitelBox + "' , '" + ArgAarBox +"' , '" + ArgBeskrivelseBox + "' , '" + ArgSkrevetAfBox + "')";
            MySqlCommand myCommand = new MySqlCommand(myInsertQuery);
            myCommand.Connection = myConnection;
            myConnection.Open();
            myCommand.ExecuteNonQuery();
            myCommand.Connection.Close();
           
            }
    }
}

Det virker helt fint, og får sent 4 argumenter med kaldet.
Nej det er ikke det rigtige kodeord og brugernavn ;)

Nogen ideer til hvordan jeg får hentet og vist dataene.
Mange Tak.
Avatar billede arne_v Ekspert
21. oktober 2004 - 09:51 #1
Der er flere måder.

Den mest simple er nok en data reader.

Eksempel:

using System;
using System.Data;
using ByteFX.Data.MySqlClient;

class MainClass
{
    public static void Main(string[] args)
    {
        MySqlConnection con = new MySqlConnection("Database=Test;Data Source=localhost;User Id=;Password=");
        con.Open();
        MySqlCommand sel = new MySqlCommand("SELECT * FROM T1", con);
        MySqlDataReader rdr = sel.ExecuteReader();
        while(rdr.Read()) {
            Console.WriteLine(rdr[0] + " " + rdr[1]);
        }
        rdr.Close();
        con.Close();
    }
}
Avatar billede arne_v Ekspert
21. oktober 2004 - 09:52 #2
En mere avanceret løsning er brug af f.eks. data set og data grid.
Avatar billede cdull Nybegynder
21. oktober 2004 - 10:11 #3
Kan du så forklare mig hvordan jeg får det udskrevet i mit program?

har lavet en Windows Form. Kan se du skrivr console.writeline, det skal jeg jo ikke brue.
Avatar billede arne_v Ekspert
21. oktober 2004 - 10:20 #4
Hvis du bruger data reader kan du assigne rdr[feltno] til diverse kontroller
såsom TextBox etc..

DataGrid er er en GUI kontrol, så hvis du vælger den løsning, så sker det
hele automatisk.
Avatar billede cdull Nybegynder
21. oktober 2004 - 10:22 #5
okay. det med rdt kan jeg lige få en forklaring på hvordan jeg sætter det. hvis vi nu siger at jeg har 4 labels
label1 label2 label3 og label4

og jeg så vil have fire forskellige værdier, fra 4 poster i databasen i hver sin label.


Håber det giver mening :)
Avatar billede arne_v Ekspert
21. oktober 2004 - 10:27 #6
Hvis du har en kontrol med navnet MyControl og du vil haveden tredie
kolonne i current row over, så:

MyControl.Text = (string)rdr[2];
Avatar billede cdull Nybegynder
21. oktober 2004 - 10:40 #7
hmm kan ikke rigtigt få det til at virke. jeg har lavet en ny fil med denne class.
Jeg har en label der hedder Titel hvordan får jeg så kolonne 3 til at stå i den.
min Titel label er i Form1.

skal Titel.Text = (string)rdr[2]; skrives i classen eller i min form1?
Avatar billede arne_v Ekspert
21. oktober 2004 - 10:43 #8
Det er naturligvis et krav at både Titel og rdr er kendt
der hvor koden er.

Koden skal formentlig enten kaldes når formen åbner eller når der
klikkes på en knap.
Avatar billede cdull Nybegynder
21. oktober 2004 - 10:46 #9
Ja det er klart.
Jeg kalder koden ved en knap i min form1
Moviehent newmoviehent = new Moviehent();
newmoviehent.Hent();

Og så går den over i min class. Men ved ikke hvad det er jeg gør galt.
Er mit kald rigtigt?
Avatar billede arne_v Ekspert
21. oktober 2004 - 10:46 #10
Her er et eksempel ganske vist med en RichTextBox hvor koden køres fra
knapper:

using System;
using System.Drawing;
using System.Windows.Forms;
using ByteFX.Data.MySqlClient;

namespace DefaultNamespace
{
    public class MainForm : Form
    {
        private MySqlConnection con;
        private Button btnHent;
        private RichTextBox rtbHent;
        private Button btnGem;
        private RichTextBox rtbGem;

        public MainForm()
        {
            InitializeComponent();
            con = new MySqlConnection("Database=Test;Data Source=localhost;User Id=;Password=");
            con.Open();
        }
       
        [STAThread]
        public static void Main(string[] args)
        {
            Application.Run(new MainForm());
        }
       
        private void InitializeComponent() {
            rtbGem = new RichTextBox();
            btnGem = new Button();
            rtbHent = new RichTextBox();
            btnHent = new Button();
            SuspendLayout();

            rtbGem.Location = new Point(25, 25);
            rtbGem.Name = "rtbGem";
            rtbGem.TabIndex = 0;
            rtbGem.Text = "";

            btnGem.Location = new Point(175, 25);
            btnGem.Name = "btnGem";
            btnGem.TabIndex = 2;
            btnGem.Text = "Gem i DB";
            btnGem.Click += new System.EventHandler(BtnGemClick);

            rtbHent.Location = new Point(25, 150);
            rtbHent.Name = "rtbHent";
            rtbHent.TabIndex = 1;
            rtbHent.Text = "";

            btnHent.Location = new Point(175, 150);
            btnHent.Name = "btnHent";
            btnHent.TabIndex = 3;
            btnHent.Text = "Hent fra DB";
            btnHent.Click += new System.EventHandler(BtnHentClick);

            AutoScaleBaseSize = new Size(5, 10);
            ClientSize = new Size(300, 275);
            Controls.Add(btnHent);
            Controls.Add(btnGem);
            Controls.Add(rtbHent);
            Controls.Add(rtbGem);
            Name = "MainForm";
            Text = "Gem og hent test";
            ResumeLayout(false);
        }

        void BtnGemClick(object sender, System.EventArgs e)
        {
            MySqlCommand ins = new MySqlCommand("INSERT INTO rtftest VALUES(1,@RTFTXT)", con);
            ins.Parameters.Add(new MySqlParameter("@RTFTXT",  rtbGem.Rtf.Replace(@"\",@"\\")));
            ins.ExecuteNonQuery();
        }
       
        void BtnHentClick(object sender, System.EventArgs e)
        {
            MySqlCommand sel = new MySqlCommand("SELECT rtf FROM rtftest WHERE id=1", con);
            String res = (String)sel.ExecuteScalar();
            rtbHent.Rtf = res;
        }
    }
}
Avatar billede cdull Nybegynder
21. oktober 2004 - 11:26 #11
nu har jeg fået det til at virke med en post fra databasen. Min Titel. Hvordan får jeg det til at virke med endnu en?

har det her:
MySqlCommand sel = new MySqlCommand("SELECT Titel,Aar FROM visningFilm WHERE id='" + taeller + "'", con);
String res = (String)sel.ExecuteScalar();
Titel.Text = res;

Hvordan får jeg så de ting der er i Aar til at blive vist i fx labelAar?

Det er sikkert simpelt og den sidste ting jeg spørger om inden jeg lukker spørgsmålet og tildeler dig pointene.
Avatar billede arne_v Ekspert
21. oktober 2004 - 11:29 #12
Prøv:

MySqlCommand sel = new MySqlCommand("SELECT Titel,Aar FROM visningFilm WHERE id='" + taeller + "'", con);
MySqlDataReader rdr = sel.ExecuteReader();
Titel.Text = (string)rdr[0];
Aar.Text = (string)rdr[1];
Avatar billede arne_v Ekspert
21. oktober 2004 - 11:29 #13
Hov jeg glemte noget:

MySqlCommand sel = new MySqlCommand("SELECT Titel,Aar FROM visningFilm WHERE id='" + taeller + "'", con);
MySqlDataReader rdr = sel.ExecuteReader();
rdr.Read(); // <---- nødvendig
Titel.Text = (string)rdr[0];
Aar.Text = (string)rdr[1];
Avatar billede arne_v Ekspert
21. oktober 2004 - 11:30 #14
Men ExecuteScalar er kun til enkelt værdier.

Til flere kolonner bruger man readeren.
Avatar billede arne_v Ekspert
21. oktober 2004 - 11:30 #15
og et svar
Avatar billede cdull Nybegynder
21. oktober 2004 - 11:50 #16
perfekt Mange Tak. Du er bare cool.
Avatar billede arne_v Ekspert
21. oktober 2004 - 11:56 #17
En dag hvor du har lidt tid så prøv og kig på DataGrid kontrollen
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