qt远程连接sqlserver

本文详细介绍了如何安装SQLServer2008r2,并通过ODBC和QtWidgets应用程序实现本地和远程数据库的连接及操作,包括数据库创建、表结构设计和数据查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本例使用SQL server2008 r2
第一步肯定就是安装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,可以做一下修改,移植到刚刚的代码里看效果。
说明,本博客非原创,但是实验成功
原博客地址:https://www.cnblogs.com/tianxxl/p/11851495.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值