31. juli 2004 - 19:26Der er
38 kommentarer og 2 løsninger
Den underligste ByteFX fejl
Hej!
Jeg er ved at gå HELT I SPÅNER fordi ByteFX ter sig totalt åndssvagt... Jeg har følgende kode:
MySqlConnection con = new MySqlConnection(MyConString); MySqlDataReader reader = null; MySqlCommand command = new MySqlCommand(); command.Connection = con;
command.CommandText = "SELECT ting1, ting2 from sager where something = 2"
con.Open(); reader = command.ExecuteReader();
while (reader.Read()) { ... }
Det åndssvage ligger i at reader.Read() returnerer false selvom jeg kan gå ind og se hvad getString(0) er med en quickwatch. Dvs den finder data men reader.Read() er false ????????! Jeg kan se at der bliver hentet de data ud jeg ønsker men den blir bare ved med at være false. Jeg er simpelthen ved at gå ud af mit gode pølseskind...
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Hvis du kun får returnere én record, og du forespørger på read inde i løkken vil den returnere false, selvom du kan få noget på getstring... Det er ikke det der er problemet vel ?
Der kan du se at der er 6 elementer i reader men reader.carRead er false ?!?! (jeg har ikke den samme kode som jeg ha skrevet fordi der drejer sig om top hemmelig kode :D det er bare SQL'en der er skiftet ud)
men når alt kommer til alt så synes jeg bare det er mærkeligt at mit sql-statement giver resultat når jeg kører det direkte på databasen men ikke når jeg gør det fra koden...
Men det må kunne undersøges nærmere ved at: sammenligne SQL sammenligne connection strings etc. for at se om det nu er samme SQL mod samme database som samme bruger etc.
Den har så faktisk allerede læst data til buffer, men markerer dem nok først til at være der ved Read (jeg formoder altså at Read kaldet så kun sætter hasValue).
Men så er vi tilbage ved den grimme canRead = false som fpr Read til at returnere false
Lyder vildt.... Jeg synes ikke der er noget der ser skummelt ud i de watch-dumps du har lagt ud. hasValue har jeg aldrig set true med en kode som din, og canRead vil være false når alle rækker er læst, men hasRows vil være true indtil readeren nedlægges igen - så det er der heller ikke noget mystisk i. Det eneste mystiske er selvfølgelig hvis watchen fortæller dig det den gør - uden du på noget tidspunkt har kaldt read (heller ikke i kommandovinduer eller i wathcen)... Det burde ikke kunne lade sig gøre. Men har du kaldt den pr. kode/kommandolinie eller watch - og kun har en række vil det se ud som det gør.
argh... det hele bunder i en n00b fejl der var umulig at finde pga reader.Read() var false...
Når jeg debugger og stopper ved reader.Read() så er der åbenbart en timeout på som gør at efter MEGET kort tid (1 sek ca) skifter reader.Read() fra true til false. Når jeg debugger når jeg ikke at komme videre i koden efter det korte timeout og kommer derfor ikke derind hvor fejlen er... Jeg havde ændret en attribut i min kode fra string til bool... lidt træls at bruge sin aften på at jagte en fejl der ikke findes hvorefter man finder ud af at det blot var en dummefejl man selv havde lavet et helt andet sted...
det er fandme godt jeg har 8 guldbarrer af de små og 4 af de store tilbage :P
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.