Avatar billede Kim Neesgaard Seniormester
09. december 2008 - 14:27 Der er 10 kommentarer og
1 løsning

Øgning af timeout ved SQL kald fra en webside

Jeg har en forespørgsel fra en webside mod en SQL Servertabel, men den går i timeout efter defaulttiden på 30 sekunder. Via andre indlæg har jeg set, at man bør kunne øge timeout som følger:

Dim Cmd As Data.SqlClient.SqlCommand = New Data.SqlClient.SqlCommand(Sql, Conn)
Cmd.CommandTimeout = 120
Return Cmd.ExecuteReader()

men når jeg måler tiden til timeout herefter, er den stadig 30 sekunder?

Hvordan kan man øge timeouttiden?
Avatar billede aaberg Nybegynder
09. december 2008 - 14:33 #1
Bruger du "context connection=true" i din connectionstring? Hvis du gør det, bliver CommandTimeOut propertien ignoreret.
Avatar billede arne_v Ekspert
09. december 2008 - 16:10 #2
En query som koeres fra en web side der tager mere end 30 sekunder lyder som
et problem. Burde det ikke loeses fremfor at saette timeout op ?
Avatar billede Kim Neesgaard Seniormester
10. december 2008 - 10:27 #3
aaberg_cc -> Det har jeg ikke - den ser sådan ud (ligger i web.config):

<add name="SQLServer" connectionString="SERVER=SQLDKxx; UID=userid; PWD=pw; DATABASE=dbname;"/>

arne_v: Det er en langhåret SQL på 11 store SAP tabeller. Der er lagt indexer på tabellerne, men alligevel når den det ikke indenfor 30 sekunder. Lige i netop dette tilfælde gør det ikke spor, at der skal ventes i mere end 30 sekunder (men ellers giver jeg dig selvfølgelig helt ret i betragtningen!).
Avatar billede arne_v Ekspert
14. december 2008 - 05:45 #4
Og det er ikke ASP.NET som laver timeout p.g.a. en:

<httpRuntime executionTimeout="30"/>

?
Avatar billede Kim Neesgaard Seniormester
14. december 2008 - 17:56 #5
Jeg har dette stående:

<httpRuntime maxRequestLength="10000" executionTimeout="10000"/>
Avatar billede Kim Neesgaard Seniormester
16. december 2008 - 09:28 #6
aaberg_cc -> jeg har læst på nettet, at 'context connection' pr. default er sat til true og dette kunne måske være grunden til, at timeout ikke kan ændres? Spørgsmålet er så: hvordan sætter man aktivt 'context connection' til false?
Avatar billede aaberg Nybegynder
16. december 2008 - 12:07 #7
"context connection=true" betyder at forbinde til sig selv. Det bliver hovedsageligt brugt fra .NET stored procedures. Hvis dit databasekald er fra websiden til serveren, er det ikke det der er problemet. Jeg har desværre ikke lige nogen fornemmelse af, hvad dit problem er!?

Hvad står der egentlig i fejlmeddelelsen?
Avatar billede Kim Neesgaard Seniormester
16. december 2008 - 15:10 #8
Der står: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.Object reference not set to an instance of an object.
Avatar billede Kim Neesgaard Seniormester
18. december 2008 - 10:25 #9
Jeg har nu fra anden kilde fået løsningen! Det er SqlDataAdapter objektet, der skal tildeles en timeout. Før Fill skal der indføjes:

objAdapter.SelectCommand.CommandTimeout=XXXX

Så virker det!!
Avatar billede aaberg Nybegynder
18. december 2008 - 10:42 #10
Tillykke! Men det var åbenbart den forkerte kode du skrev i dit spørgsmål, for der bruger du en DataReader frem for en DataAdapter!
Avatar billede Kim Neesgaard Seniormester
18. december 2008 - 13:10 #11
Det har du da bare helt ret i! Jeg har en generel rutine, der har en DataReader og adapter mulighed og jeg kan se af mine kommenteringer, at jeg har TROET, at jeg til problemforespørgslen brugte readeren, men i virkeligheden brugte jeg adapteren. Beklager forvirringen!
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