Avatar billede mosquito Nybegynder
30. oktober 2005 - 00:03 Der er 6 kommentarer og
1 løsning

Stored procedure, datareader returnerer intet

Jeg er ved at oprette en metode, der fylder en listbox med de forfattere, som kommer fra et valgt område defineret i et text felt.

min metode som en knap aktiverer, ser sådan ud:

        private void btnAuthors_Click(object sender, System.EventArgs e)
        {
            SqlCommand myCommand = new SqlCommand();
           
            myCommand.Connection = sqlConn;
            myCommand.CommandType = CommandType.StoredProcedure;
            myCommand.CommandText = "dbo.test";
           
            myCommand.Parameters.Add("@State",SqlDbType.Char);
            myCommand.Parameters["@State"].Value=txtState.Text;

            try
            {
                if(myCommand.Connection.State==ConnectionState.Closed)
                    myCommand.Connection.Open();

                SqlDataReader reader;
                reader = myCommand.ExecuteReader();

                lstAuthors.Text="";
               
                while(reader.Read())
                {
                    lstAuthors.Text += reader.GetString(0) + " " + reader.GetString(1) + reader.GetString(2)
                        + reader.GetString(3) + " " + reader.GetChar(4);
                }
                myCommand.Connection.Close();
            }
            catch(SqlException ex)
            {
                MessageBox.Show(ex.Message.ToString());
            }
        }


min stored procedure ser sådan ud:

ALTER PROCEDURE dbo.test
    (
        @State char
    )
AS
    Select au_lname, au_fname, address, city, state from authors where state = @State
    RETURN

hvori ligger fejlen. Min datareader er tom??? men burde indeholde en del data, når jeg eksekverer sql statement direkte mod databasen.
Avatar billede arne_v Ekspert
30. oktober 2005 - 00:14 #1
prøv evt. med nogle længder:

myCommand.Parameters.Add("@State",SqlDbType.Char, 2);

ALTER PROCEDURE dbo.test
    (
        @State char(2)
    )
Avatar billede mosquito Nybegynder
30. oktober 2005 - 00:24 #2
damn... det har taget mig 1 time og så er det så simpelt... nå men dejligt du kunne hjælp.. smid et svar, det var løsningen på mit problem
Avatar billede arne_v Ekspert
30. oktober 2005 - 00:24 #3
kommer her
Avatar billede mosquito Nybegynder
30. oktober 2005 - 00:26 #4
takker
Avatar billede www.jakub.dk Nybegynder
30. oktober 2005 - 06:50 #5
Det er faktisk nok med bare at angive typen. Du kan sagtens tillade dig at skippe længden
Avatar billede mosquito Nybegynder
30. oktober 2005 - 10:24 #6
www.jakub.dk > Definitionen i min stored procedure er jeg nødt til at sætte længden til to. Det giver vel også mening idet en char almindeligvis er ét tegn. Ellers har du ret, når min stored procedure er angivet med længde, er det ikke nødvendigt at definere den i min parameter collection.
Avatar billede mosquito Nybegynder
30. oktober 2005 - 10:32 #7
ja en fejl var der også i min tilføjelse til listboxen lstAutrhors, hvis andre kan bruge informationen, er rettelsen her:

                lstAuthors.Items.Clear();
                string record = "";
                while(reader.Read())
                {
                    record = reader.GetString(0) + "\t" + reader.GetString(1) + "\t" +reader.GetString(2)
                        + "\t" + reader.GetString(3) + "\t" + reader.GetString(4) + "\n";
                    lstAuthors.Items.Add(record);
                }

og det er sådan set alt, når den stored procedure er rettet som forslået af arne_v
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