Qt遠程連接SQL Server 2008 r2


  公司領導說要跟一個醫院對接數據庫,我這就去了解了SQL Server 2008 r2,其實上學的時候學過,不過學的是一些基本操作。這次試一試用Qt遠程連接。

翻了2天,終於可以用qt上位機連接同局域網下的另一台電腦內的數據庫。把過程做個博客記錄一下。

第一步肯定就是安裝SQL Server 2008 r2。這個網上教程一大堆,但是我並不推薦,推薦直接用官網上的安裝包,網上的都太大了。

官網連接:https://www.microsoft.com/zh-cn/download/confirmation.aspx?id=23650 我用這個安裝包安裝並沒有用到激活碼啥的,還是不錯的。

下載完成后運行,最好先在電腦整理一個磁盤,用於存放SQL Server 2008 r2。

 

 選擇安裝,進入安裝程序頁面。

 

 點擊安裝,

 

 接受許可條款,下一步。

 

點擊全選, 更改目錄,只需更改放在哪個盤即可,后面的文件夾不用改。點擊下一步。

 

 把實例根目錄也改了,下一步。

 

 這兩個服務的啟動類型設置為自動。下一步

 

 選擇混合模式,設置密碼,添加當前用戶,我這里已經把電腦的登陸用戶加進去了,下一步,再下一步,進入安裝頁面

 

 等待安裝完成。點擊關閉即可

 

 運行剛剛安裝的SQL Server Management Studio

進入連接頁面:

 

 服務器名稱選擇 local也就是本機,身份驗證選擇SQL Server身份驗證,登錄名sa,密碼為剛剛安裝時設置的密碼。點擊連接即可。

現在創建一個數據庫

 

點擊新建查詢,輸入以下代碼:

CREATE DATABASE Bank;

點擊執行,然后刪除以上,再輸入以下代碼

use Bank;
CREATE TABLE Card
( Account INT PRIMARY KEY,
  Pwd VARCHAR(12) NOT NULL,
  Balance INT CHECK(Balance>=0)
 )

 CREATE TABLE Record
 ( Account INT FOREIGN KEY(Account) REFERENCES Card(Account),
   Rmoney INT,
   Rtime DATETIME NOT NULL DEFAULT GETDATE()
  )

  INSERT INTO Card VALUES(123456,123456,100000);
  INSERT INTO Record (Account,Rmoney) VALUES (123456,-100);

點擊執行,執行成功后點擊刷新,即可看到剛剛創建的數據庫Bank。

 

 

 接下來就可以開始遠程連接了,開始之前先確保兩個:

一:服務器允許遠程連接,右鍵點擊已連接的服務器,選擇'屬性',點擊左側‘連接’

 

 二:打開SQL Server配置管理器,選擇SQL Server 網絡配置 - MSSQLSERVER的協議,右鍵TCP/IP,選擇啟用

 

 然后重啟服務即可

下一步是關閉電腦防火牆,當然了,最優做法是在防火牆上為SQL Server創建規則,我這里,懶人做法啦。

把這台電腦當做服務器。

然后找另一台和這台服務器在同一局域網下的電腦開始連接測試。

使用ODBC建立數據源,直接在電腦上搜索ODBC即可。打開之后,點擊 添加 

 

 

 選擇 SQLServer  點擊確定

 

 

 

 

 

 填寫名稱和描述,名稱等下程序里要用,描述隨便寫。服務器選擇剛剛安裝SQL Server 2008並創建數據庫的電腦的IP地址或者電腦名,點擊下一步

 

 

 選擇 使用用戶輸入登陸ID和密碼的SQL Server驗證,然后輸入登陸ID和密碼,也就是服務器電腦數據庫的ID和密碼(安裝時設置的)。點擊下一步。

 

 

 勾選 更改默認的數據庫為   ,然后在下拉列表中選擇剛剛在服務器中創建的數據庫,我這里是Bank。點擊下一步

再直接點擊完成,再點擊 測試數據庫連接  直到出現

 

 

 說明ODBC數據源創建成功。可以開始下一步了。

然后寫代碼進行測試,新建Qt Widgets應用程序,然后修改main.cpp為

#include "mainwindow.h"
#include <QApplication>
#include<QSql>
#include <QDialog>
#include <QDebug>
#include <QMessageBox>
#include<QSqlError>
#include<QSqlDatabase>
#include<QSqlQuery>

bool OpenDatabase()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");   //數據庫驅動類型為SQL Server
    qDebug()<<"ODBC driver?"<<db.isValid();
    QString dsn = QString::fromLocal8Bit("tianSQLServer");      //數據源名稱   剛剛創建的數據源的名稱
    db.setHostName("Yct201909041134");                        //選擇IP地址,也就是服務器的IP地址或者電腦名
    db.setDatabaseName(dsn);                            //設置數據源名稱
    db.setUserName("sa");                               //登錄用戶  創建數據源時輸入大的用戶名和密碼
    db.setPassword("tian");                              //密碼  
    if(!db.open())                                      //打開數據庫
    {
        qDebug()<<db.lastError().text();
        QMessageBox::critical(0, QObject::tr("Database error"), db.lastError().text());
        return false;                                   //打開失敗
    }
    else
    {
        qDebug()<<"database open success!";
        QSqlQuery query(db); //查詢Card表並輸出,測試能否正常操作數據庫
        query.exec("SELECT * FROM Card");
        while(query.next())
        {
            qDebug()<<query.value(0).toInt() <<query.value(1).toString() <<query.value(2).toInt();
        }

    }return true;
}

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;

    if(!OpenDatabase())
        return 1;

    w.show();
    return a.exec();
}

運行程序可以在控制台看到輸出

 

 

下面還有一個不需要創建ODBC數據源即可遠程連接SQL Server數據庫的方法。

//網絡數據庫SQL訪問
/***************************************************************************
 * 函數名:openSQLServer
 * 參數1:ip 數據庫服務器IP
 * 參數2:dbName 數據庫名稱
 * 參數3:userName 用戶名
 * 參數4:passwd   密碼
 * 返回 true 打開數據庫成功
 * ************************************************************************/
bool MainWindow::openSQLServer(const QString ip,const QString dbName,const QString userName,const QString passwd)
{
       db = QSqlDatabase::addDatabase("QODBC");  //數據庫驅動類型為SQL Server
       qDebug()<<"ODBC driver?"<<db.isValid();
       QString dsn = QString("DRIVER={SQL SERVER};SERVER=%1;DATABASE=%2").arg(ip).arg(dbName);
       db.setDatabaseName(dsn);
       db.setUserName(userName);                        //登錄用戶
       db.setPassword(passwd);                          //密碼
       if(!db.open())                                   //打開數據庫
       {
           qDebug()<<db.lastError().text();
           QMessageBox::critical(0, QObject::tr("Database error"), db.lastError().text());
           return false;                                   //打開失敗
       }
       else
       {
           qDebug()<<"database open success!";
           QMessageBox::critical(0, QObject::tr("Database ok"),"數據庫打開成功");
           QSqlQuery query(db); //查詢Card表並輸出,測試能否正常操作數據庫
           query.exec("select * from [Bank].[dbo].[Card]");
           while(query.next())
           {
               qDebug()<<query.value(0).toString()  <<query.value(1).toString() <<query.value(2).toString();
           }

       }
       return true;
}

說明:此代碼里的參數dbName是數據庫名,也就是服務器中創建的數據庫的名字,像我這里就是Bank,可以做一下修改,移植到剛剛的代碼里看效果。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM