我有一个控制服务器连接的功能。 如果ado无法在5秒内连接,则应该出错。但是connectiontimeout属性不起作用。
以下是我正在使用的代码:
function AdoConnectionTester(strServerName, strUserName, strPassword,
strDBName: string; boolShowMessage: boolean): Boolean;
var
ADOConn: TADOConnection;
begin
try
Result := True;
ADOConn := TADOConnection.Create(nil);
ADOConn.LoginPrompt :=False;
ADOConn.Close;
ADOConn.ConnectionString := 'Provider=SQLOLEDB.1; Password='+strPassword+';'+
'Persist Security Info=True;User ID='+strUserName+';'+
'Initial Catalog='+strDBName+';'+
'Data Source='+strServerName;
try
ADOConn.ConnectionTimeout := 5;
ADOConn.Open;
except
on E: Exception do
begin
Result := False;
ShowMessage(E.Message);
end;
end;
if Result then
if boolShowMessage = True then
ShowMessage('OK');
finally
ADOConn.Free;
end;
end;
我该如何解决这个问题?
答案 0 :(得分:0)
你没有说出你的意思"不起作用",但我认为你的意思是连接不会在你指定的时间段结束时超时。
使用下面的代码和保证失败的ConnectionString(通过指定不存在的服务器),似乎TAdoConnection不会在我的LAN上大约9秒内超时。如果指定了超过该超时时间段的超时时间段,则确实会在较长时间段后超时,但实际时间与指定的超时值不紧密相关。因此,指定超时值确实可以“工作”。从某种意义上讲,如果你想要一个与你一样低的超时价值,那就好了。
如果有任何可以通过德尔福的Ado来克服这个限制,我会感到惊讶。 AdoConnection1.ConnectionTimeout简单地传递给附加到它的Ado ConnectionObject,并且在#34;另一侧" COM界面,所以如果它没有回应你想要的,那么就没有什么可以做的了。机器的TCPIP设置中的某些东西可能有效,但我并不打扰我发现; =)
更新由另一个SO q提示,我重新测试了我的代码,AdoConnection在LAN上超时的最短时间已经减少到2.8秒,没有任何硬件更改或有意识地更改软件。可能差异是由Win10更新中的某些内容引起的。
procedure TForm1.TestConnectionTimeOut(Timeout : Integer);
var
T1 : Integer;
begin
T1 := GetTickCount;
AdoConnection1.ConnectionTimeout := Timeout;
try
AdoConnection1.Connected := True;
except
ShowMessage(Exception(ExceptObject).Message + #13#10 + IntToStr(GetTickCount - T1));
end;
end;