QSqlDatabase [ODBC]的远程连接问题



我正在尝试连接到远程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]Named Pipes Provider: Could不打开连接到SQL Server[1326]。(微软)[SQL Server原生客户端10.0]与网络相关或特定于实例的错误有在建立到SQL Server的连接时发生。服务器不是已找到或无法访问。检查实例名是否正确,SQL是否正确服务器配置为允许远程连接。了解更多信息请参阅SQL Server在线图书。[Microsoft][SQL Server Native Client10.0] QODBC3:无法连接

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

注意:本地连接正常

使用这些设置,请使用用户名并传递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/端口的连接很重要。默认的不能直接使用ip/port连接

从https://wiki.qt.io/ODBC

最新更新