webForumDet fria alternativet

Använda Timeout?

.NETur .NET

5 svar · 657 visningar · startad av Fireh

FirehMedlem sedan jan. 2003173 inlägg
#1

Hej.

Jag försöker komma på hur man använder sig av timeout, eller om det finns en bättre möjlighet, för att upptäcka att SQL-servern inte är igång/inte svarar. Nedan följer den kod som används i Visual Basic för att öppna databasen:

Sub Databas()

On Error Resume Next
Set Conn = New ADODB.Connection
Conn.CommandTimeout = 2
Conn.ConnectionTimeout = 2

If Conn.State = Closed Then
  If dbTyp = "Access" Then
    Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbPath
  End If
  If dbTyp = "SQL" Then
    Conn.ConnectionString = "Driver={SQL Server};Server=" & dbIP & ";Database=" & dbName & ";Uid=" & dbUser & ";Pwd=" & dbPass
    Conn.Open
  End If
End If

If Conn.State = Closed Then
  MsgBox "Det gick inte att öppna databasen!", vbCritical, "Fel"
End If

End Sub

Ovan öppnar antingen en Access-databas eller en databas på en SQL 2005-server. När det gäller Access-databasen är det inga problem, finns inte filen så blir det fel direkt. Men om jag stänger SQL-servern för att simulera att den inte svarar, så tar det 42 sekunder innan felmeddelande kommer. Jag har testat att ändra värdena för CommandTimeout och ConnectionTimeout, men det blir ingen som helst skillnad.

Är det här ett bra sätt att göra det på eller finns det något bättre sätt att kontrollera innan man försöker läsa/skriva och saker kraschar?

Tacksam för tips och hjälp.

@ndersMedlem sedan juni 200032 969 inlägg
#2

Flyttas från SQL.

LedelMedlem sedan dec. 2004736 inlägg
#3

Med MSSQL 2005 så ska du kunna sätta din timeout i din connectionstring:
Conn.ConnectionString = "Driver={SQL Server};Server=" & dbIP & ";Database=" & dbName & ";Uid=" & dbUser & ";Pwd=" & dbPass &";Connect Timeout=10;"
Borde fungera.

FirehMedlem sedan jan. 2003173 inlägg
#4

Jag tycker nog tyvärr inte det blev någon skillnad. Det tar fortfarande 42 sekunder innan jag får fel. Jag har provat med Connect Timeout=10, ConnectTimeout=10 och ConnectionTimeout=10 utifall du skrev fel också, men ingen av dom gjorde någon skillnad. Känns skumt... fler idéer?

LedelMedlem sedan dec. 2004736 inlägg
#5

Hmm, testadedu Connection Timeout=10 (med mellanslag)?

FirehMedlem sedan jan. 2003173 inlägg
#6

Nej, men nu gjorde jag det. Ingen skillnad :(

126 ms totalt · 3 externa anrop · v20260731065814-full.29ac60f6
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
123 ms — hämta tråd, inlägg och bilagor (db)