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,可以做一下修改,移植到刚刚的代码里看效果。

猜你喜欢

转载自www.cnblogs.com/tianxxl/p/11851495.html