31. marts 2011 - 02:29Der er
9 kommentarer og 1 løsning
return int og return Int32 forskellig
Hej,
Jeg fatter ikke en meter (men har fundet "fejlen") - jeg vil bare have en forklaring.
Jeg har en metode, hvor jeg skal returnere en int Dette gjorde jeg ved at bruge public int AnsiBug_GetBugViewLastRankOrder(string UserId, int bugViewTypeId)
Når jeg så brugte metoden på en side (den kom ikke med nogen fejl) i en metode (button click event), så ville siden bare ikke loade.
Efter jeg så ændrede (altså efter 2 1/2 time med at lede efter "fejlen") det til public Int32 AnsiBug_GetBugViewLastRankOrder(string UserId, int bugViewTypeId) loader siden perfekt....
Det eneste metoden gjorde (da jeg debuggede mig igennem var at lave en return 4; (dette for at sikre mig det ikke var kaldet til min stored procedure, det var galt med)
Nogen der gider fortælle mig hvorfor - for indtil nu har jeg altså altid brugt int som return værdi og ikke Int32...og ikke haft problemer med at loade sider?
Med kunstig intelligens skaber HP’s nye OmniBook X 14 en unik og skræddersyet brugeroplevelse målrettet dem, der ønsker høj ydeevne og intelligente funktioner
public int AnsiBug_GetBugViewLastRankOrder(string UserId, int bugViewTypeId) { DAL.AddParameter("UserId", UserId); DAL.AddParameter("bugViewTypeId", bugViewTypeId);
Som du kan se udkommenterede jeg selve stored procedure kaldet for kun at returnere tallet 4...... Så der BURDE i min verden ikke være nogen ben i det overhovedet.....Jeg har altså lavet tonsvis af de her kald også med return værdien sat til int uden problemer....Men når jeg kørte siden, så ville den bare ikke loade siden.
Hvis jeg udkommenterede kaldet i test_click delen - loader siden. Når jeg ændrer int til Int32 loader siden:
public Int32 AnsiBug_GetBugViewLastRankOrder(string UserId, int bugViewTypeId) { DAL.AddParameter("UserId", UserId); DAL.AddParameter("bugViewTypeId", bugViewTypeId);
Håber det er nok - for hardware nørd er og bliver jeg altså ikke - så du skal tegne og fortælle, hvis du skal have andet at vide om mit hardware *griner*
Tro mig på mit ord....det var det ikke - det eneste jeg ændrede er int til Int32.....Og derfor jeg desperat har skrevet herinde
For som du, har jeg også den fulde overbevisning, at de burde være ens....og som skrevet tidligere - så er det altså normalt int jeg bruger.
Min fremgangsmåde:
1) Jeg oprettede en metode (oprettede storedprocedure, oprettede metode til kald til storedprocedure i cs fil og til sidst knyttede den til gridview rowcommand) 2) Testede om metoden var rigtig - siden ville ikke loade 3) Debuggede mig igennem 100 forskellige ting, for at finde ud af hvor fejlen var - fandt den ikke. Herunder tjekkede jeg også at den hentede en korrekt int ud fra databasen ved at teste proceduren i SQL Manager. 4) Fjernede metoden fra gridview rowcommand - siden loadede 5) oprettede en test knap og smed metoden ind - siden loadede ikke 6) Ændrede return til 4 i cs filen (tjek at den hentede en korrekt int ud)- siden loadede ikke 7) Hentede en anden metode fra cs filen (hvor jeg også returnerer en int) - siden loadede 8) Hentede igen metoden fra cs filen med return 4 og siden loadede ikke 9) Ændrede int til Int32 og siden loadede 10) Ændrede return fra 4 til at hente fra databasen - siden loadede 11) flyttede min metode ned i gridview rowcommand og slettede test knappen. 12) Testede min metode - siden loadede og metoden var rigtig by the way :-) 12) Blev så irriteret - nå skidt ....hidsig - at jeg skrev herinde, for at få en forklaring :-)
Og nej, jeg er den eneste, der sidder ved min pc - og ingen andre har adgang til den. Så det er ikke fordi andre har kunnet gøre et eller andet :-)
Men ... hvis du siger det ikke er din maskine etc. så må du kunne genskabe problemet i en lille test app som vi kan køre på vores maskine. Her burde vi så få samme fejl.
Jeg siger ikke det, ikke er min maskine.....jeg siger, at jeg ikke lavede andet end min 12 punkts liste på det pågældende tidspunkt....
Og nej, jeg kan sikkert ikke genskabe situationen, for har da lavet endnu en metode, hvor jeg returnerer en int (som jeg dog bruger på en anden side end den pågældende) - uden de samme problemer....Det er kun den pågældende metode, der har skabt problemer for mig.
Og det irriterer mig altså ikke SÅ meget, at jeg orker at genskabe hele siden til test.
En anden ting, der undrer mig, er at jeg ikke kaldte metoden i sidens load funktion men i test knap/gridview rowcommand....Hvorfor den så flejner i sidens load (= ikke vil loade) og ikke først, når jeg kalder metoden. Men det må så forblive et mysterium :-)
Hvis du ikke kan/vil genskabe det, så vil det jo være en bug på dit system.
Det burde jo være nemt at genskabe, da du selv har lavet en guide, vi skal bare vide hvad vi præcist skal teste, derfor må du jo lave koden præcist som den er.
Hvis det er en knap, så kan AutoWiring være slået fra.
Alt efter hvordan din knap er lavet i din aspx fil, og hvordan hele koden bagved hvor du lavet dit GridView er lavet, er det ikke sikkert de bliver wired op korrekt.
Du burde kunne se på din buttom efter det hele er oprette om den har nogen subscribers attached.
Men ... svært at sige, men tvivler eneste forskel stadig har været int vs Int32. Hvis du virkelig kan genskabe det, så ville jeg gøre det for at give os røv herinde ... og få ret :-). Jeg har selv været i din situation, hvor jeg var 100% sikker på de andre tog fejl, dog viste det sig at være mig selv ... og det er øv.
Du burde kende mig efterhånden......For mig ville det bestemt ikke være øv, hvis det er mig selv, der har lavet ged i den....Så ville jeg jo have mulighed for at lære noget nyt (eller for den sags skyld gammelt....som bare ikke VIL fise ind i den øverste).
Og du kan altså tvivle herfra og til dommedag....Det var det eneste jeg rettede *griner*
Smid et svar og tak fordi du har gidet at kigge på det :-)
Og det er ikke fordi jeg ikke VIL vise dig min kode....Så du får den da lige her (du får dog kun gridview versionen, ellers skal jeg til at lave test button osv igen - og jeg er ellers færdig med den side):
AnsiBug_BugView bugviewprevious = new AnsiBug_BugView(); bugviewprevious.AnsiBug_SetBugViewRankOrder(Convert.ToInt32(previousBugViewId.Text), Convert.ToInt32(currentRankOrder.Text));
AnsiBug_BugView bugviewcurrent = new AnsiBug_BugView(); bugviewcurrent.AnsiBug_SetBugViewRankOrder(Convert.ToInt32(currentBugViewId.Text), Convert.ToInt32(previousRankOrder.Text));
LoadBugViewList(); }
} if (e.CommandName == "MoveDown") { int bugViewId = Convert.ToInt32(e.CommandArgument);
GridViewRow currentRow = ((GridViewRow)(((ImageButton)(e.CommandSource)).NamingContainer)); int rowIndex = currentRow.RowIndex;
int bugViewTypeId = 1;
if (BugViewType == BugViewTypes.ReportView) { bugViewTypeId = Convert.ToInt32(BugViewTypes.ReportView); }
AnsiBug_BugView bugviewrankorder = new AnsiBug_BugView(); int rankorder = bugviewrankorder.AnsiBug_GetBugViewLastRankOrder(CurrentUserId, bugViewTypeId);
Vil du have koder til de andre metoder, siger du bare til :-)
Jeg har ikke udkommenteret return i AnsiBug_GetBugViewLastRankOrder og lavet en return 4, som jeg gjorde under test forløbet.
Men igen - du behøver ikke genskabe - jeg har affundet mig med, at der altså er en fejl - om det så er mig selv eller systemet, som jeg ikke lige lærer noget af.
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.