本例使用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