我有一个控制服务器连接的功能。如果ado不能在5秒内连接,则应该会出现错误。但是,连接超时属性无法工作。
下面是我使用的代码:
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;我该如何解决这个问题?
发布于 2016-04-01 12:47:54
您没有说“不工作”是什么意思,但我假设您的意思是在指定的时间段结束时,连接不会超时。
使用下面的代码和一个保证失败的ConnectionString (通过指定一个不存在的服务器),TAdoConnection在我的局域网上似乎不会在大约9秒内超时。如果指定的超时时间比指定的时间长,则它确实会在较长的期间之后超时,但实际时间与指定的超时值没有密切关联。因此,指定一个超时值在某种意义上是“起作用的”,但如果你想要一个像你这样低的超时值,那就不是表面上的了。
如果有任何东西可以通过德尔菲的Ado来克服这个限制,我会感到惊讶。AdoConnection1. ConnectionObject只是简单地传递给附加在它上的Ado ConnectionObject,它位于COM接口的“另一边”,所以如果它没有以您想要的方式响应,就会有afaik,您无法对它做任何事情。机器TCPIP设置中的某些内容可能会产生影响,但我并不是为了找出;=而干扰我的设置)
由另一个因此q提示的更新,我重新测试了我的代码,在我的局域网上AdoConnection超时的最短时间已经缩短到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;https://stackoverflow.com/questions/36355461
复制相似问题