使用 QODBC 的 MS SQL Server 数据库连接

在尝试使用 QODBC 打开数据库连接时,请确保

  • 你有 QODBC 驱动程序
  • 你的服务器具有 ODBC 接口并且已启用(这取决于你的 ODBC 驱动程序安装)
  • 使用共享内存访问,TCP / IP 连接或命名管道连接。

所有连接仅需要通过调用 QSqlDatabase :: setDatabaseName 来设置 DatabaseName。

使用共享内存访问打开连接

要使此选项起作用,你需要访问计算机的内存,并且必须具有访问共享内存的权限。要使用共享内存连接,需要在服务器字符串前面设置 lpc :. 使用 SQL Server Native Client 11 进行连接是使用以下步骤进行的:

QString connectString = "Driver={SQL Server Native Client 11.0};";                     // Driver is now {SQL Server Native Client 11.0}
connectString.append("Server=lpc:"+QHostInfo::localHostName()+"\\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");
}

使用命名管道打开连接

此选项要求 ODBC 连接具有完整的 DSN。通过使用 Windows Computername 和 SQL Server 的 Instancename 来设置服务器字符串。将使用 SQL Server Native Client 10.0 打开示例连接

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");
}

使用 TCP / IP 打开连接

要打开 TCP / IP 连接,应将服务器配置为允许在固定端口上进行连接,否则首先必须查询当前活动的端口。在此示例中,我们在 5171 处有一个固定端口。你可以找到一个示例,用于设置服务器以允许固定端口上的连接为 1 。要使用 TCP / IP 打开连接,请使用服务器 IP 和端口的元组:

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");
}