我试图建立与远程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
文件进行了测试。
注意:本地连接效果很好
答案 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连接。