Avatar billede martinsorensen Nybegynder
06. november 2007 - 21:05 Der er 14 kommentarer og
1 løsning

Database query

Hej eksperter. Jeg har følgende query.

                    SqlCommand cmd = new SqlCommand("DELETE FROM opretKunde WHERE kundenummer='" + SdbSammenlign + "' OR firmanavn='" + SdbSammenlign + "' OR cvrnummer ='" + SdbSammenlign + "'", con);

Mit problem er så, når denne udføres så slettes den row som hentydes til IKKE. Og der bliver ikke fanget nogen fejl i try/catchen.

Her er hele koden:

private void button3_Click(object sender, EventArgs e)
        {
           
            SqlConnection con = new SqlConnection("Server=localhost\\SQLEXPRESS;Integrated Security=true;database=database");
                try
                {
                    string SdbSammenlign = listBox1.SelectedIndex.ToString();

                    SqlCommand cmd = new SqlCommand("DELETE FROM opretKunde WHERE kundenummer='" + SdbSammenlign + "'", con);
                    con.Open();
                    SqlDataReader rdr = cmd.ExecuteReader();
                    while (rdr.Read())
                    {
                        cmd.ExecuteNonQuery();
                    }
                }
                catch (Exception er)
                {
                    MessageBox.Show("Fejl : " + er.Message);
                }

                finally
                {
                    if (con != null)
                    {
                        con.Close();
                    }
                }

                if (listBox1.SelectedIndex != -1)
                {
                //Sletter den markerede
                listBox1.Items.RemoveAt(listBox1.SelectedIndex);
                }

                MessageBox.Show("Den valgte kunde er nu slettet");
       
            }

I den table som hentydes til, er der mange colums, men det burde da ikke have nogen betydning?


håber i kan hjælpe

Mvh

Martin Sørensen
Avatar billede martinsorensen Nybegynder
06. november 2007 - 21:07 #1
Ved godt det ikke er den sammen query som skrevet øverst, det er fordi jeg kom til at kopiere noget gammelt kode :) Men det er den øverste som der ikke virker efter hensigten.
Avatar billede martinsorensen Nybegynder
06. november 2007 - 21:10 #2
Der jeg selv tror det går galt er i:

string SdbSammenlign = listBox1.SelectedIndex.ToString();

Men kan ikke lige gennemskue hvad det skulle være?
Avatar billede arne_v Ekspert
06. november 2007 - 21:15 #3
Proev:

MessageBox.Show(cmd.CommandText);

lige foer Execute og se om der er noget mystisk !
Avatar billede nielle Nybegynder
06. november 2007 - 21:18 #4
Sådan?

private void button3_Click(object sender, EventArgs e)
{
    SqlConnection con = new SqlConnection("Server=localhost\\SQLEXPRESS;Integrated Security=true;database=database");

    string SdbSammenlign = listBox1.SelectedIndex.ToString();

    SqlCommand cmd = new SqlCommand("DELETE FROM opretKunde WHERE kundenummer='" + SdbSammenlign + "'", con);
    con.Open();
    cmd.ExecuteNonQuery();
    con.Close();

    if (listBox1.SelectedIndex != -1)
    {
        //Sletter den markerede
        listBox1.Items.RemoveAt(listBox1.SelectedIndex);
    }

    MessageBox.Show("Den valgte kunde er nu slettet");
}
Avatar billede martinsorensen Nybegynder
06. november 2007 - 21:19 #5
Du mener

while (rdr.Read())
                    {
                        MessageBox.Show(cmd.CommandText);
                        cmd.ExecuteNonQuery();
                    }

Der kommer ingen tekstbox frem :s
Avatar billede martinsorensen Nybegynder
06. november 2007 - 21:22 #6
Det underlige er når jeg laver en query med værdien direkte

eks.

SqlCommand cmd = new SqlCommand("DELETE FROM opretKunde WHERE kundenummer='000001' OR firmanavn = '000001' OR cvrnummer = '000001', con);

Så virker det.
Avatar billede arne_v Ekspert
06. november 2007 - 21:23 #7
nej kun:

                        MessageBox.Show(cmd.CommandText);
                        cmd.ExecuteNonQuery();

DELETE returnerer ingen data saaingen brug for reader
Avatar billede arne_v Ekspert
06. november 2007 - 21:24 #8
proev og udskriv den sql text - jeg har mistanke om at der er for mange mellemrum eller
for faa nuller eller lignende
Avatar billede nielle Nybegynder
06. november 2007 - 21:24 #9
Din:

string SdbSammenlign = listBox1.SelectedIndex.ToString();

giver *indekset* i din ListBox hvor værdien ligger - men den giver ikke selve værdien.
Avatar billede martinsorensen Nybegynder
06. november 2007 - 21:25 #10
nielle:

Nej det er stadig det samme problem :(
Avatar billede nielle Nybegynder
06. november 2007 - 21:26 #11
Ret til:

string SdbSammenlign = listBox1.Items[listBox1.SelectedIndex].ToString();
Avatar billede martinsorensen Nybegynder
06. november 2007 - 21:30 #12
AHHH :D nielle

string SdbSammenlign = listBox1.SelectedIndex.ToString();

giver *indekset* i din ListBox hvor værdien ligger - men den giver ikke selve værdien.

Det er der problemet er. Den angiver hvad plads i indexet den valgte er. Og ikke den string værdi jeg gerne vil have. Nogen ideer til hvordan jeg kan får stringværien i stedet for hvad plads i listBox den er. Altså hvis der nu står MARTIN og det det er det jeg vil have i en string?
Avatar billede martinsorensen Nybegynder
06. november 2007 - 21:32 #13
Så virker det!!! :D

Men jeg forstår ikke hvad forskellen er? hvad betyder []???

Smid et svar nielle, og også tak for hjlpen arne_v!
Avatar billede nielle Nybegynder
06. november 2007 - 21:36 #14
> hvad betyder []???

Items er et array. Fopr at få det element ud som står på f.eks. plads nr. 42 skriv3er man:

Items[42]

Nu står indekset du skal have fat på i variablen "listBox1.SelectedIndex" og derfor hedder det:

Items[listBox1.SelectedIndex]
Avatar billede martinsorensen Nybegynder
06. november 2007 - 21:40 #15
DOH!! Selvfølgelig :p men opretter lige et nyt spørgsmål, for har brug for at vide hvordan man kan bruge checkbox som en radiobutton, og hvordan man søger i en listbox medn en ontextchange
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