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