硬件:台式组装机
系统:win10
sqlserver版本:sqlserver2014
qt版本:5.14.1
Qt Creator版本:4.11.1
安装sqlserver数据库的过程参见我的文章:win10安装SqlServer2014_GreenHandBruce的博客-CSDN博客
打开SQL Server2014 Management Studio
输入用户名和密码登录:
右击数据库——新建数据库,设置数据库名为TestSql,所有者为sa,如下图:
新建完成后,右击数据库——刷新,就能看到刚新建的数据库了,如下图:
然后右击表——点击表(T)...,如下图:
表里面添加几列,如下图:
Ctrl+S保存,表名设为TableTopo,然后就能看到左侧多了一个表,如下图:
右击ID行,设为主键,并设置标志范围:是,这样子是为了查询更快速,并且让表内数据有唯一标识符,如下图:
然后保存,结果保存的时候跳出来这个报警:
点击“工具”——“选项”——“设计器”,去掉“阻止保存要求重新创建表的更改”勾选项,如下图:
然后就可以保存这个表了,接着右击该表——编辑200行,如下图:
添加一些数据,如下图:
然后打开SQL Server 2014 配置管理器,如下图:
点击SQL Native Client 11.0配置——右击别名——新建别名:
如下设置:
停止SQL Server服务,如下:
然后打开相关的1433端口,如下:
然后打开sqlserver服务,如下:
然后在系统程序和功能里面打开telnet功能:
打开按下Windows键+R,输入cmd,回车,打开cmd命令行界面,输入
telnet 127.0.0.1 1433
来查看1433端口是否打开,如下图:
如果回车后是黑界面,则1433端口已经打开了,如下图:
好,接下来是我们的qt代码环节了,新建一个qt工程:
mainwindow.h代码如下:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>
#include <QDebug>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
struct NodeInSql
{
int nNodeID;
int nParentID;
QString strNodeName;
};
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
void ConnectSql();
~MainWindow();
private:
Ui::MainWindow *ui;
QList<NodeInSql> m_lstNodeInSql;
};
#endif // MAINWINDOW_H
mainwindow.cpp代码如下:
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
ConnectSql();
qDebug()<<"nNodeID nParentID strNodeName:";
for(int i = 0;i<m_lstNodeInSql.count();i++)
{
qDebug()<<m_lstNodeInSql[i].nNodeID<<","<<m_lstNodeInSql[i].nParentID<<","<<m_lstNodeInSql[i].strNodeName;
}
}
void MainWindow::ConnectSql()
{
QSqlDatabase db= QSqlDatabase::addDatabase("QODBC", "dbTemp");
db.setDatabaseName(QString("DRIVER={SQL SERVER};"
"SERVER=%1;" //服务器名称
"DATABASE=%2;"//数据库名
"UID=%3;" //登录名
"PWD=%4;" //密码
).arg("127.0.0.1,1433")//默认的sqlserver的端口号是1433
.arg("TestSql")
.arg("sa")
.arg("**********")//填写你的sa账号的密码!!!!!!!!!!!!
);
//数据库连接
bool ok = db.open();
if(ok)
{
qDebug()<<"database open success";
}
else
{
qDebug()<<db.lastError();
return;
}
//数据库查询
QSqlQuery query(db);
query.exec("SELECT * FROM TableTopo;");
while(query.next())
{
NodeInSql node;
if(query.value(1).isValid())
node.nNodeID = query.value(1).toInt();
if(query.value(2).isValid())
node.nParentID = query.value(2).toInt();
if(query.value(3).isValid())
node.strNodeName = query.value(3).toString();
m_lstNodeInSql.append(node);
}
db.close();
}
MainWindow::~MainWindow()
{
delete ui;
}
运行结果如下,完美获取sqlserver数据库的数据: