webForumDet fria alternativet

Använda Timeout?

.NET

5 svar · 659 visningar · startad av Fireh

Medlem sedan jan. 2003173 inlägg
Frågan#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.

Medlem sedan juni 200032 967 inlägg
#2

Flyttas från SQL.

Medlem 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.

Medlem 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?

Medlem sedan dec. 2004736 inlägg
#5

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

Medlem sedan jan. 2003173 inlägg
#6

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

270 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
134 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)