1用ADOConnection1连接数据库时,如果数据库不存在都会等待很久,甚至会出现假死情况。要避免这种情况可以用扫描一下SQL的端口1433是否开放。扫描代码如下
function ScanTCPPort(ipstr: string; Port: DWORD): Boolean; var option: DWORD; TcpSock: TSocket; InAddr: TSockAddrIn; IP: DWORD; begin result := False; //convert IP string to ulong IP := ntohl(inet_addr(PChar(ipstr))); if IP = INADDR_NONE then //invalid IP address! exit; // Create/open a socket (stream, not datagram) TcpSock := socket(AF_INET, SOCK_STREAM, 0); if TcpSock = INVALID_SOCKET then //socket error exit; try // Set socket options option := 0; setsockopt(TcpSock, SOL_SOCKET, SO_KEEPALIVE, @option, sizeof(option)); option := 1; setsockopt(TcpSock, SOL_SOCKET, SO_DONTLINGER, @option, sizeof(option)); //if winsock 1.1, including the next sentence, otherwise, skip it. setsockopt(TcpSock, IPPROTO_TCP, TCP_NODELAY, @option, sizeof(option)); //Initialize address structure ZeroMemory(@InAddr, sizeof(InAddr)); InAddr.sin_family := AF_INET; InAddr.sin_addr.S_addr := ntohl(IP); InAddr.sin_port := htons(Port); //Try to connect Result := connect(TcpSock, InAddr, sizeof(InAddr)) = 0; finally //Close the socket closesocket(TcpSock); end; end;