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