Qt5中的QSqlDatabase可用于连接SqlServer,并通过open来打开数据库(建立连接),但是如果设置的数据库IP地址时传入一个错误的IP地址,open就会一直阻塞不会返回。
帮助文档中有关于连接的一些选项,通过QSqlDatabase::setConnectOptions来设置
其中上述的SQL_ATTR_LOGIN_TIMEOUT和SQL_ATTR_CONNECTION_TIMEOUT看似是与连接相关的选项。
测试发现SQL_ATTR_LOGIN_TIMEOUT是有效的,但是SQL_ATTR_CONNECTION_TIMEOUT无效,查阅资料后发现跟ODBC版本有关
ODBC1.0支持SQL_ATTR_LOGIN_TIMEOUT;
ODBC3.0支持SQL_ATTR_CONNECTION_TIMEOUT;
db.setConnectOptions("SQL_ATTR_LOGIN_TIMEOUT=2");//阻塞两秒
if (!db.open())
{
return false;
}
else
{
return true;
}
但是调试时发现,传入的ip明显错误时(例如196.168.0.999),上述的设置才起效(估计是登录,即检测ip格式),若传入合法ip,则阻塞时间还是很长(50s左右)
查看官方文档发现有这句话
SQL Server本机客户端ODBC驱动程序忽略SQL属性连接超时的设置。
直接用vc库连接sql server结果依旧不变,目前无法解决。。。