Just nu i M3-nätverket
Gå till innehåll

problem med c# kod


ikaikaika

Rekommendera Poster

Hej, jobbar inte med programmering men skulle behöva lösa denna kod. Har enbart grundkunskap i tsql så känner mig väldigt vilsen. Är det någon som kan förklara koden samt hjälpa till med lösningen?

 

 

Följande C#-kod körs i en aspx-sida.

...
...
long sum = 0; 
for ( int i = 0; i < 888; i++)
{
    // GetIntFromSQL returns an int from an SQL-statement-resultset with one
    // row, one column
    sum += GetIntFromSQL("EXEC dbo.ObscureProcedure @i = "+ i.ToString());
};
Response.Write(sum.ToString());
...
...
 


Proceduren i Microsoft SQL Server ser ut enligt:

CREATE PROCEDURE dbo.ObscureProcedure
    @i int
AS
BEGIN
    SELECT
        CASE
            WHEN @i < 260 THEN
                COUNT(*) * @i 
            ELSE
                COUNT(*) * 260
        END AS ObscureCount
    FROM
        VacationGadget
    WHERE
        @i < 714
END


Kör man proceduren i Microsoft SQL Server Management Studio enligt ...

EXEC dbo.ObscureProcedure @i = 528


... så får man svaret:

ObscureCount
------------
3138460

(1 row(s) affected)

 

Vilket tal skulle C#-koden högst upp skriva ut?

Länk till kommentar
Dela på andra webbplatser

Hmmm... Vad är det för suspekt kod du hittat?

 

Koden skapar en variabel sum och börjar en loop som snurrar åttahundraåttioåtta gånger. För varje snurr i loopen så adderar man till sum, resultatet av sql-proceduren med parametervärde av den snurr man är inne på.

 

Förtydligande, först anropar man parametern med värde 0, sen 1, sen 2 etc etc ända upp till 887.

 

Proceduren å andra sidan hämtar upp antalet rader i tabellen VacationGadget och multiplicerar det med värdet du skickade in till proceduren om detta värde är mindre än 260, annars multiplicerar den med 260. Fast vad WHERE @i < 714 gör är jag inte helt hundra på.

Länk till kommentar
Dela på andra webbplatser

Jag tror jag klurat ut att WHERE @I < 714 innebär att om du skickar in ett värde till proceduren som är större än 714 så kommer den returnera 0.

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...