QSqlDatabase的远程连接问题[ODBC]

时间:2016-10-07 07:38:05

标签: qt pyqt qt5 qsqldatabase

我试图建立与远程SQL服务器的连接:

QSqlDatabase db = QSqlDatabase::addDatabase("QODBC3");
    db.setDatabaseName(QString("Driver={SQL Server Native Client 10.0};Server=X.X.X.X;Database=/*DB*/;"));
    db.setUserName("sa");
    db.setPassword("/*password*/");

    if (!db.open()) {
        qDebug() << db.lastError().text();
    }
    else
    {
        qDebug() << "connected";
    }

但是大约7秒后,它给了我这个日志:

  

[Microsoft] [SQL Server Native Client 10.0]命名管道提供程序:可以   没有打开到SQL Server的连接[1326]。 [微软] [SQL Server   Native Client 10.0]与网络相关或特定于实例的错误   在建立与SQL Server的连接时发生。服务器不是   发现或无法访问。检查实例名称是否正确以及SQL是否正确   服务器配置为允许远程连接。欲获得更多信息   请参阅SQL Server联机丛书。 [Microsoft] [SQL Server Native Client   10.0]登录超时已过期QODBC3:无法连接

但服务器已启动并正在运行且连接正常并且已使用UDL文件进行了测试。

注意:本地连接效果很好

1 个答案:

答案 0 :(得分:3)

使用这些设置,请用户并传入dbname,请:

QString connectString = "Driver={SQL Server Native Client 10.0};"; // Driver can also be {SQL Server Native Client 11.0}
connectString.append("Server=SERVERHOSTNAME\\SQLINSTANCENAME;");   // Hostname,SQL-Server Instance
connectString.append("Database=SQLDBSCHEMA;");  // Schema
connectString.append("Uid=SQLUSER;");           // User
connectString.append("Pwd=SQLPASS;");           // Pass
db.setDatabaseName(connectString);
if(db.open())
{
    ui->statusBar->showMessage("Connected");
}else{
    ui->statusBar->showMessage("Not Connected");
}

或不使用完整的DSN

QString connectString = "Driver={SQL Server};"; // Driver is now {SQL Server}
connectString.append("Server=10.1.1.15,5171;"); // IP,Port
connectString.append("Database=SQLDBSCHEMA;");  // Schema
connectString.append("Uid=SQLUSER;");           // User
connectString.append("Pwd=SQLPASS;");           // Pass
db.setDatabaseName(connectString);
if(db.open())
{
    ui->statusBar->showMessage("Connected");
}else{
    ui->statusBar->showMessage("Not Connected");
}

对于基于ip / port的连接,重要的是在服务器配置中启用此类连接。默认一个不能直接使用ip / port连接。

来自https://wiki.qt.io/ODBC