23. august 2012 - 15:05Der er
6 kommentarer og 1 løsning
Falder igennem på switch grundet DB-kald?
I den følgende switch har jeg et stort problem med scope't:
// Bruger/ekspedient scanner varer eller returnere ved 'H' switch (myCSK) {
case "H": Program HvMn = new Program(); HvMn.StartAlt(); break; case "S": StartSalg(); break; case "V": bool visBoolForfra = true; StartSalgVisning(visBoolForfra); break; case "K": Console.WriteLine("\nKvittering...\n"); SammenRegner nySR = new SammenRegner(); nySR.SammenRG(mylist, myCSK, counter, sendRFV); break; case "CK": StartSalgMedKvitt stSalg2 = new StartSalgMedKvitt(); stSalg2.StartSalg(); break; case "VN": Console.WriteLine("\n1.2.V Du er nu i varenavns-zonen \n(Ønsker du at returnere til 3-ciferkode-zonen, skal du nu taste '121' og enter)"); myCSK = Console.ReadLine(); if (myCSK == "CK") { StartSalg(); } else { Console.WriteLine("Varenavnsloop"); vareNavnsLoop(); } break; default:
if (Convert.ToInt32(myCSK) > 101 && Convert.ToInt32(myCSK) < 1000) { // afvikl hent varenavn og pris til kvitteringsopbygning (før disse med over til sammenregner.cs)
while (mylist.Count > counter) { sendRFV = returnValueFaVa; SammenRegner nySRW = new SammenRegner(); nySRW.SammenRG(mylist, myCSK, counter, sendRFV);
// Her udskrives at valget ikke er rigtigt indtastet Console.WriteLine("Indtastning genkendes ikke (dine bogstaver skal skrives med stort, og/eller varenummeret skal have 3 cifre) - Prøv igen."); if (myCSK != "K") { StartSalg(); } } } catch { if (myCSK != "K") {
Console.WriteLine("Varenummeret genkendes ikke, da du har tastet 'ingen-tegn'/specialtegn eller bogstaver.\n Såfremt du ønsker at søge på et varenavn nu, skal du taste 'VN'"); StartSalg(); }
Jeg gætter på, at der sker en fejl ifm. dit SQL-kald og du dermed ryger i catch-sektionen. Men da du kun gør/viser noget, hvis betingelsen myCSK != "K" er opfyldt, får du ikke nogen indikation af denne fejl.
Skriv et eller andet ud i Console (indtil det fungerer i et mindste) i den catch-blok, så du kan følge din kodes eksekveringssti. Du kan f.eks. udskrive teksten fra den undtagelse der rejses... :-)
Når nu du alligevel har gang i et Command-objekt til databasekaldet, så kan du jo ligeså godt benytte dig at parametre, i stedet for at plastre din SQL-sætning sammen af SQL og parameterværdien.
Ja, kan umiddelbart se hvad du mener med 'default', problemet er jo bare at såfremt brugeren (i denne vareindtastnings-programdel i et butikssystem) indtaster en 3-cifret varekode (eks-vis '115'), så ramler switchen normalt (uden kommentering) ned til default, da ingen af de ovenfor karakter-baserede valg bliver opfyldt.
Således er jeg sikker på at switchen fungerer upåklageligt så langt, at 'default' afvikles hvis et tal indskrives.
- - -
Kodestumpen med DB-kaldet, har allerede ligget ud i en metode, hvor det desv. heller ikke virkede..
>> det virker bare som om at DB-kaldet i sig selv skaber scope-problemer og ignorerer pointer-kronologien?
I øvrigt giver dine tjek på om myCSK != "K", i default-sektionen af din switch, vel ikke ret meget mening, når du allerede har en case "K" tidligere. Dvs. i default-sektionen vil myCSK ALTID være forskellig fra "K" og dermed vil dine betingelser altid være sande (og dermed overflødige)... eller har jeg overset noget?
Det gør så også min påstand fra før ugyldig, da du jo burde få udskrevet en meddelelse om at "Varenummeret genkendes ikke..." - og det har du jo ikke nævnt noget om (hvad sker der egentlig?)...
Tak fir hjælpen til Jer begge - Det var selvfølgelig mig selv der ikke udnyttede at consol-writeline; 'Exception e', så jeg ku se at conn ikke var åben.. Derfra ku jeg smide cnn.Open(); ind det rette sted for at få det til at virke (havde copy-pasted db-conn fra et andet sted, og åbenbart fået slettet cnn.Open(); i den forb.)
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.