Avatar billede bac Nybegynder
14. september 2009 - 21:54 Der er 8 kommentarer og
1 løsning

Returnere en string fra en db via en forespørgsel.

Hejsa eksperter

Jeg har lige lavet en db forbindelse som skal hente oplysninger om en bog via et ISBN nummer, min metode virker fint og er testet og ser således ud:

public string findOplysningOmBog(string ISBN)
        {
            //oprettelse til DB
            string MyConString = "SERVER=localhost;" + "DATABASE=bb;" + "UID=root;" + "PASSWORD=password;";

            //oprettelse af connection og en reader til at kunne læse data
            MySqlConnection connection = new MySqlConnection(MyConString);
            MySqlCommand command = connection.CreateCommand();
            MySqlDataReader Reader;

            command.CommandText = "SELECT titelId, forfatterId FROM bog WHERE bogISBN = '" + ISBN + "'";
            connection.Open();
            Reader = command.ExecuteReader();
            string opl = "";
            while (Reader.Read())
            {
                opl = "Forfatter: "+ Reader.GetValue(1).ToString() +" "+ "Titel: " + Reader.GetValue(0).ToString();
            }
            connection.Close();

            return opl;
        }

Jeg har så lavet en metode i gui laget, den foregående var fra DB, hvor jeg henter oplysninger om dette via et textField, jeg vil så have at en label modtager oplysningen om den undersøgte query, det virker ikke, jeg ved simpelthen ikke hvordan jeg lige skal hente den. Mit håbløse kode ser sådan her ud:

if (DropDownList1.SelectedValue.Equals("Find bog"))
            {
                bog.findOplysningerOmBog(TextBox1.Text);
                Label1.Text = "ID: "+bog.findOplysningerOmBog(bog.findOplysningerOmBog(TextBox1.Text));
                Label1.Visible = true;
            }

Skal der stå noget andet end TextBox1.Text inde i objektet, altså den skal jo retunere en string her: bog.findOplysningerOmBog(TextBox1.Text)?
Avatar billede Slettet bruger
15. september 2009 - 10:46 #1
Har du autopostback på din dropdownlist?
Nu kan jeg ikke se din gui kode, men du skal nok have autopostback på din dropdownlist og så 'gribe' den i din Page_Load metode.

Noget ala:

If Page.IsPostBack
string strBog = DropDownList1.SelectedValue;

Alternativt kan du oprette en eventhandler for din dropdownlist og hente værdien fra databasen i denne metode.
Avatar billede bac Nybegynder
15. september 2009 - 14:03 #2
Jeg vil bare have den til at retunere den string fra min DB query

Hvis jeg anvender textBox1.text("page.IsPostBack"); retunerer den bare True jeg vil have selve dataen fra en anden row i DB'en altså hvis jeg søger på ISBN "ISBN 1-12547-125-2" får jeg forfatter og bogId frem. Undskyld min manglende oplysning :)
Avatar billede Slettet bruger
15. september 2009 - 14:38 #3
Ja, men du bliver nødt til at 'gribe' værdien fra databasen, eller nærmere bestemt, du bliver jo nødt til at kalde metoden hvor værdien returneres.

Nu er det jo lidt sparsomt med kode, der viser hvordan det hele foregår, men fra din GUI, skal der jo laves et kald til databaselaget, hvor værdien returneres.

Det er derfor jeg spørger om du har en AutoPostBack på din dropdown liste - altså en måde, hvor med værdien fra tekstboksen sendes tilbage til siden og dermed kan 'gribes' og benyttes som parameter til databasekaldet.
Avatar billede bac Nybegynder
15. september 2009 - 15:36 #4
Jeg kalder jo bare den metode som står i indlæg 1 fra databasen, den metode retunerer så en string med det nye objekt

Selve gui'en kalder jeg bare via min drop down box til at retunere denne string i en textbox:

protected void Button2_Click(object sender, EventArgs e)
        {
            Bog bog = new Bog();

           
           
            if (DropDownList1.SelectedValue.Equals("Find bog"))
            {
                bog.findOplysningerOmBog(TextBox1.Text);
                Label1.Text = "ID: ";
                Label1.Visible = true;
            }
        }
Avatar billede Slettet bruger
15. september 2009 - 15:51 #5
Ok. Nu giver det lidt mere mening.
Prøv med.

if (DropDownList1.SelectedValue.Equals("Find bog"))
            {
                Label1.Text = "ID: " + bog.findOplysningerOmBog(TextBox1.Text);
                Label1.Visible = true;
            }

Du laver jo rigtig nok et kald med parameteren fra dropdownlisten, men du benytter den ikke og sætter intet i din label andet end 'ID:'
Avatar billede bac Nybegynder
15. september 2009 - 15:53 #6
Jeg har prøvet med den metode du kommer med der, der står også kun ID fordi jeg testede med det andet indtil da :)

Den retunerer ikke noget overhovedet desværre, men der er heller ikke nogen fejl :(
Avatar billede Slettet bruger
15. september 2009 - 15:57 #7
Prøv at ændre din metode, hvor data hentes i databasen til at returnere en statisk værdi.

return ""Dette er en test;

På denne måde kan du se om du overhovedet får en værdi fra denne metode.
Avatar billede bac Nybegynder
15. september 2009 - 16:00 #8
Nå jeg ved ikke hvad jeg lige gjorde med db'en men nu virker det :)

Mange tak for hjælpen hvad du end gjorde, smid et svar hvis du vil have point :)
Avatar billede Slettet bruger
15. september 2009 - 16:06 #9
Svar
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