Avatar billede simsen Mester
31. marts 2011 - 02:29 Der 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?
Avatar billede Syska Mester
31. marts 2011 - 02:55 #1
Tror der skal lidt mere context til hvornår det stoppede med at virke og hvad du gjorde for at det virkede igen.

int og int32 er det samme. Den ene er en compiletime ting(int) da den egentlige implementering er i int32.

Kan du poste hvad der ikke virker og virker ... så kan vi jo prøve og se om vi har samme problem.

Skal vi bruge din SP ... så må du også gerne poste den. Overstående vil jeg give dig ret i burde virke med "int" som du også selv siger det burde.

Det kan dog måske have noget at gøre med hvad arkitektur du måske compiler det til ... AnyCPU/x86/x64

mvh

mvh
Avatar billede simsen Mester
31. marts 2011 - 22:48 #2
Hej mvh mvh ;-)

Helt konkret lavede jeg en test button (da jeg opdagede, det var den her funktion, der ikke virkede):

protected void test_click (object sender, EventArgs e)
{
  AnsiBug_BugView bugview = new AnsiBug_BugView();
  bugview.AnsiBug_GetBugViewLastRankOrder("aaa", 2);
}

Min kode til AnsiBug_GetBugViewLastRankOrder:

public int AnsiBug_GetBugViewLastRankOrder(string UserId, int bugViewTypeId)
        {
            DAL.AddParameter("UserId", UserId);
            DAL.AddParameter("bugViewTypeId", bugViewTypeId);

            //return Convert.ToInt32(DAL.ExecuteScaler("AnsiBug_GetBugViewLastRankOrder", CommandType.StoredProcedure));
            return 4;
        }

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);

            //return Convert.ToInt32(DAL.ExecuteScaler("AnsiBug_GetBugViewLastRankOrder", CommandType.StoredProcedure));
            return 4;
        }

Som sagt - jeg har andre metoder nøjagtig magen til, hvor jeg returnerer int uden nogen problemer også i dette her projekt.

Jeg bruger:
Processor: AMD Phenom(tm) 8750 Triple-Core Processor 2,4 GHz
RAM: 8GB
System type: 64-bit Operation System
Windows: 7
IE: 8

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*

mvh
simsen :-)
Avatar billede arne_v Ekspert
02. april 2011 - 02:02 #3
int og Int32 skal vaere det samme.

Der er et eller andet andet som også være ændret.
Avatar billede simsen Mester
02. april 2011 - 17:59 #4
arne_v

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 :-)
Avatar billede Syska Mester
02. april 2011 - 18:14 #5
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.

Det kunne være sjovt hvis der var en bug :-)

mvh
Avatar billede simsen Mester
02. april 2011 - 20:43 #6
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 :-)
Avatar billede Syska Mester
02. april 2011 - 20:58 #7
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.

buzzzz out
Avatar billede simsen Mester
03. april 2011 - 00:49 #8
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):

<asp:gridview id="grdResults" runat="server" PageSize="500" CssClass="gridMain" skinid="gridMain" cellspacing="1"
                        autogeneratecolumns="False" allowpaging="False" allowsorting="False" pagersettings-visible="false"
                        OnRowDataBound="grdResults_RowDataBound" OnRowCommand="grdResult_RowCommand">
                        <columns>
                            <asp:boundfield datafield="bugViewColumnName" headertext="Column Name" />
                            <asp:templatefield>
                                <itemtemplate>
                                    <asp:LinkButton ID="lbtnDeleteColumn" runat="server" CommandArgument='<%# Eval("bugViewId") %>' CommandName="DeleteColumn" causesvalidation="false" Text="Delete"></asp:LinkButton><asp:Label
                                        ID="lblRankOrder" runat="server" Text='<%# Eval("rankOrder") %>' Visible="false"></asp:Label><asp:Label
                                        ID="lblBugViewId" runat="server" Text='<%# Eval("bugViewId") %>' Visible="false"></asp:Label>
                                </itemtemplate>
                            </asp:templatefield>
                            <asp:templatefield>
                                <itemtemplate>
                                    <asp:ImageButton ID="ibtnMoveUp" SkinID="rankingUp" CommandArgument='<%# Eval("bugViewId") %>' AlternateText="Anja" CommandName="MoveUp" runat="server" />
                                    <asp:ImageButton ID="íbtnMoveDown" CommandArgument='<%# Eval("bugViewId") %>' CommandName="MoveDown" SkinID="rankingDown" runat="server" />
                                </itemtemplate>
                            </asp:templatefield>
                        </columns>
                    </asp:gridview>

protected void grdResult_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "DeleteColumn")
        {
            int bugViewId = Convert.ToInt32(e.CommandArgument);

            AnsiBug_BugView bugview = new AnsiBug_BugView();
            bugview.AnsiBug_DelBugView(bugViewId);

            LoadColumns();
            LoadBugViewList();
        }
        if (e.CommandName == "MoveUp")
        {
            int bugViewId = Convert.ToInt32(e.CommandArgument);

            GridViewRow currentRow = ((GridViewRow)(((ImageButton)(e.CommandSource)).NamingContainer));
            int rowIndex = currentRow.RowIndex;

            if (rowIndex > 0)
            {
                Label currentRankOrder = (Label)currentRow.Cells[0].FindControl("lblRankOrder");
                Label currentBugViewId = (Label)currentRow.Cells[0].FindControl("lblBugViewId");

                GridViewRow previousRow = grdResults.Rows[rowIndex - 1];
                Label previousRankOrder = (Label)previousRow.Cells[0].FindControl("lblRankOrder");
                Label previousBugViewId = (Label)previousRow.Cells[0].FindControl("lblBugViewId");

                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);

            if (rowIndex < (rankorder - 1))
            {
                Label currentRankOrder = (Label)currentRow.Cells[0].FindControl("lblRankOrder");
                Label currentBugViewId = (Label)currentRow.Cells[0].FindControl("lblBugViewId");

                GridViewRow nextRow = grdResults.Rows[rowIndex + 1];
                Label nextRankOrder = (Label)nextRow.Cells[0].FindControl("lblRankOrder");
                Label nextBugViewId = (Label)nextRow.Cells[0].FindControl("lblBugViewId");

                AnsiBug_BugView bugviewnext = new AnsiBug_BugView();
                bugviewnext.AnsiBug_SetBugViewRankOrder(Convert.ToInt32(nextBugViewId.Text), Convert.ToInt32(currentRankOrder.Text));

                AnsiBug_BugView bugviewcurrent = new AnsiBug_BugView();
                bugviewcurrent.AnsiBug_SetBugViewRankOrder(Convert.ToInt32(currentBugViewId.Text), Convert.ToInt32(nextRankOrder.Text));

                LoadBugViewList();
            }
        }
    }

public Int32 AnsiBug_GetBugViewLastRankOrder(string UserId, int bugViewTypeId)
        {
            DAL.AddParameter("UserId", UserId);
            DAL.AddParameter("bugViewTypeId", bugViewTypeId);

            return Convert.ToInt32(DAL.ExecuteScaler("AnsiBug_GetBugViewLastRankOrder", CommandType.StoredProcedure));
        }

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.

Igen tak for hjælpen og smid et svar :-)

mvh
simsen :-)
Avatar billede arne_v Ekspert
03. april 2011 - 01:06 #9
int of int32 opfoerer sig ikke bare ens - de er ens.

Hvis kigger paa denne her simple kode:

using System;

public class Fun
{
    private int f1 = 1;
    private Int32 f2 = 2;
    public int M1(int v1)
    {
        return f1 + v1;
    }
    public Int32 M2(Int32 v2)
    {
        return f2 + v2;
    }
}

saa viser ildasm følgende:

.method public hidebysig instance int32  M1(int32 v1) cil managed
{
  // Code size      14 (0xe)
  .maxstack  2
  .locals init (int32 V_0)
  IL_0000:  nop
  IL_0001:  ldarg.0
  IL_0002:  ldfld      int32 Fun::f1
  IL_0007:  ldarg.1
  IL_0008:  add
  IL_0009:  stloc.0
  IL_000a:  br.s      IL_000c
  IL_000c:  ldloc.0
  IL_000d:  ret
} // end of method Fun::M1

.method public hidebysig instance int32  M2(int32 v2) cil managed
{
  // Code size      14 (0xe)
  .maxstack  2
  .locals init (int32 V_0)
  IL_0000:  nop
  IL_0001:  ldarg.0
  IL_0002:  ldfld      int32 Fun::f2
  IL_0007:  ldarg.1
  IL_0008:  add
  IL_0009:  stloc.0
  IL_000a:  br.s      IL_000c
  IL_000c:  ldloc.0
  IL_000d:  ret
} // end of method Fun::M2
Avatar billede Syska Mester
04. april 2011 - 20:52 #10
svar
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