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(); }
Annonceindlæg fra HP
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
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(); }
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.
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.
Ø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 ???
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', '', '', '')\"."}
Proev lige og post hele koden igen
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(); }
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';
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.
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 + "'";
08. juni 2013 - 01:31
#13
Og skift til parameters!!
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(); }
08. juni 2013 - 02:02
#15
Og hvilken fejl faar du paa den SQL?
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 !!!!
08. juni 2013 - 02:07
#17
{"Der er ikke angivet nogen værdi for en eller flere krævede parametre."}
08. juni 2013 - 02:11
#18
Er der stave fejl som f.eks. at FistName skulle vaere FirstName?
08. juni 2013 - 02:16
#19
Ja det var der vist :) Og nu siger den: {"Datatyperne stemmer ikke overens i kriterieudtrykket."}
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.
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.
08. juni 2013 - 15:12
#22
Du har jo faaet et forslag i #20. Vil du ikke checke det, saa kommer vi ikke videre.
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.