Avatar billede Bellissima Nybegynder
08. juni 2013 - 00:19 Der er 22 kommentarer

Hjælp til C# Delete funktion

Hej,

Jeg har lavet et simpelt program i C#, hvor jeg kan oprette og søge på en medlem, der henter data fra en MS Access DB. Men min slette funktion vil bare ikke virke. Er der nogen der evt. kan fortælle mig hvorfor ?

private void deletebtn_Click(object sender, RoutedEventArgs e)
        {
         
            OleDbConnection conn = (OleDbConnection)Application.Current.Properties["DBConnection"];

            //Medlem slettes fra Members tabellen
            string StrSQL = "DELETE FROM Members (FirstName,LastName,Address,ClassNo) Where ('" + FNBox.Text + "', '" + LNBox.Text + "', '" + ABox.Text + "', '" + CBox.Text + "')";
            OleDbCommand DeleteCommand = new OleDbCommand(StrSQL, conn);
            DeleteCommand.ExecuteNonQuery();
           
        }
Avatar billede Syska Mester
08. juni 2013 - 00:25 #1
Udover dette kan give SQL Injections, så bør du også lige se på Paramaters i .NET: http://www.eksperten.dk/guide/831

Er du sikker på din where clause er korrekt? ( Kan godt ske det er en ACCESS ting.

Normalt i SQL ville den se ud som følgende:
DELETE FROM Members WHERE SomeField = 'SomeValue'

Jeg kan tage fejl ... har aldrig brugt access, men tvivler lidt på den syntax du bruger.

mvh
Avatar billede Bellissima Nybegynder
08. juni 2013 - 00:38 #2
Min where clause er korrekt ja. For når jeg bruger den samme funktion til at oprette, så virker det helt fint.

private void createbtn_Click(object sender, RoutedEventArgs e)
        {
            OleDbConnection conn = (OleDbConnection)Application.Current.Properties["DBConnection"];

            //Medlem indsættes i Members tabellen
            string StrSQL = "INSERT INTO Members (FirstName,LastName,Address,ClassNo) VALUES ('" + FNBox.Text + "', '" + LNBox.Text + "', '" + ABox.Text + "', '" + CBox.Text + "')";
            OleDbCommand InsertCommand = new OleDbCommand(StrSQL, conn);
            InsertCommand.ExecuteNonQuery();
        }
Avatar billede Syska Mester
08. juni 2013 - 00:42 #3
Nu er DELETE, UPDATE og INSERT ikke det samme, derfor jeg tvivler på det du gør er korrekt.

De har alle forskellig syntax. Du kan ikke bare skifte INSERT ud med DELETE.
Avatar billede arne_v Ekspert
08. juni 2013 - 00:48 #4
Syntax for DELETE er:

DELETE FROM tabelnavn WHERE diverse betingelser

Med INSERT kan du angive hvilke kolonner der skal puttes data i, men med DELETE sletter du altid hele raekker - derfor giver det ingen mening at angive kolonne navne.
Avatar billede Bellissima Nybegynder
08. juni 2013 - 00:49 #5
Øv det troede jeg ellers at jeg kunne :'(

Der står heller ikke så meget på nettet med lige netop den syntax jeg bruger.

Er der mon andre der har kendskab til det ???
Avatar billede arne_v Ekspert
08. juni 2013 - 00:58 #6
Det boer vaere lige ud af landevejen:

http://en.wikipedia.org/wiki/Sql_delete
Avatar billede Bellissima Nybegynder
08. juni 2013 - 00:58 #7
Hej Arne,

Når jeg gør som du siger, siger den
{"Der er en syntaksfejl, fordi der mangler et komma. i forespørgselsudtrykket \"('Ulla', '', '', '')\"."}
Avatar billede arne_v Ekspert
08. juni 2013 - 01:02 #8
Proev lige og post hele koden igen
Avatar billede Bellissima Nybegynder
08. juni 2013 - 01:06 #9
private void deletebtn_Click(object sender, RoutedEventArgs e)
        {
         
            OleDbConnection conn = (OleDbConnection)Application.Current.Properties["DBConnection"];

            //Medlem slettes fra Members tabellen
            string StrSQL = "DELETE FROM Members Where ('" + FNBox.Text + "', '" + LNBox.Text + "', '" + ABox.Text + "', '" + CBox.Text + "')";
            OleDbCommand DeleteCommand = new OleDbCommand(StrSQL, conn);
            DeleteCommand.ExecuteNonQuery();
        }
Avatar billede Syska Mester
08. juni 2013 - 01:10 #10
Du følger altså ikke den syntax som jeg skrev tidligere.

DELETE FROM Members WHERE FistName = 'Bellissima' AND Forum = 'Ekspertern'

Vil slette alle rækker der har FirstName sat til 'Bellissima' og Forum til 'Eksperten'.

Håber det giver mening.

Det er sakset fra Arne_v link:
Delete rows from table pies where the column flavour equals Lemon Meringue:
DELETE FROM pies WHERE flavour='Lemon Meringue';
Avatar billede Bellissima Nybegynder
08. juni 2013 - 01:28 #11
string StrSQL = "DELETE FROM Members Where FistName = 'FNBox.Text' AND LastName = 'LNBox.Text' AND Address = 'ABox.Text' AND ClassNo = 'CBox.Text';

Når jeg taster det ind, så viser den en rød streg under. Det vil den ikke... Jeg er stadig helt ny i C#, så alting er ikke helt så nemt for mig.
Avatar billede arne_v Ekspert
08. juni 2013 - 01:31 #12
string StrSQL = "DELETE FROM Members Where FistName = '" + FNBox.Text + "' AND LastName = '" + LNBox.Text + "' AND Address = '" + ABox.Text + "' AND ClassNo = '" + CBox.Text + "'";
Avatar billede arne_v Ekspert
08. juni 2013 - 01:31 #13
Og skift til parameters!!
Avatar billede Bellissima Nybegynder
08. juni 2013 - 01:58 #14
Nu har jeg altså prøvet lidt af hvert og ved ikke hvad du mener med parameters... Der står ikke en klar forklaring af hvad det er på nettet.

Som sagt er jeg helt ny, og sproget er også nyt...

private void deletebtn_Click(object sender, RoutedEventArgs e)
        {

            string fn = FNBox.Text;
            string ln = LNBox.Text;
            string ad = ABox.Text;
            string cno = CBox.Text;

            OleDbConnection conn = (OleDbConnection)Application.Current.Properties["DBConnection"];

            //Medlem slettes fra Members tabellen
            string StrSQL = "DELETE FROM Members Where FistName = '" + fn + "' AND LastName = '" + ln + "' AND Address = '" + ad + "' AND ClassNo = '" + cno + "'";
            OleDbCommand DeleteCommand = new OleDbCommand(StrSQL, conn);
            DeleteCommand.ExecuteNonQuery();
           
        }
Avatar billede arne_v Ekspert
08. juni 2013 - 02:02 #15
Og hvilken fejl faar du paa den SQL?
Avatar billede arne_v Ekspert
08. juni 2013 - 02:03 #16
Og det med at der ikke er noget om parameters paa nettet kan godt undre lidt, naar du nu fik et link tilbage i #1 !!!!
Avatar billede Bellissima Nybegynder
08. juni 2013 - 02:07 #17
{"Der er ikke angivet nogen værdi for en eller flere krævede parametre."}
Avatar billede arne_v Ekspert
08. juni 2013 - 02:11 #18
Er der stave fejl som f.eks. at FistName skulle vaere FirstName?
Avatar billede Bellissima Nybegynder
08. juni 2013 - 02:16 #19
Ja det var der vist :)

Og nu siger den:

{"Datatyperne stemmer ikke overens i kriterieudtrykket."}
Avatar billede arne_v Ekspert
08. juni 2013 - 02:25 #20
Saa er der nok et af felterne som er tal og ikke tekst - og saa skal der ikke '' omkring vaerdien.
Avatar billede Bellissima Nybegynder
08. juni 2013 - 14:28 #21
Jeg har sendt dig en invitation paa dropbox, hvor jeg har zippet mit program, samt uploadet DB'en.
Tror det vil vaere nemmere at finde fejlen.
Avatar billede arne_v Ekspert
08. juni 2013 - 15:12 #22
Du har jo faaet et forslag i #20. Vil du ikke checke det, saa kommer vi ikke videre.
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