远程连接SQL Server数据库(基于Sequelize / Navicat)

  • Post author:
  • Post category:其他


一.配置SQL Server

这部分网上已有很多详细的教程,挑选了一篇较为详细的供大家参考


【笔记】win10远程连接SQL Server – 简书 (jianshu.com)



为了读者的阅读体验,请务必按以上链接的过程先配置一遍再继续阅读



以下为配置的注意事项:

务必

要将SQL Server 的

验证方式

设置为

windows身份验证 + SQL Server 身份验证














务必

根据【教程】

将配置过程中设置的port在

防火墙

中添加对应的规则


在所有配置完成后,务必重启SQL server服务


可在【SQL server Configuration Manager】中进行重启

可在【SQL Server Management Studio】中进行重启


二.测试连通性

在根据【教程】配置完后,进行连通性测试,本次选用

SQL Server Management Studio

(以下简称SSMS)测试

SSMS的“

连接到服务器

”窗口如下:



服务器名称一栏

在网上检索的时候都没有看到通俗易懂的答案,自己记录一下踩坑过程。

1.“服务器名称”填本机名称

默认情况下,

服务器名称应该

为本机的名称+SQL server实例名,例如我的为

LAPTOP-XXXX\SQL Server实例名



身份验证

”的“

登录名

”和

“密码”

参考自己在【教程】中的设置


如图所示:

填写后 点击【连接】,SQL Server 连接成功

2.“服务器名称”填IPv4地址

若想在程序中远程连接数据库,用

本机名称

显然是不合理的。”服务器名称”一栏是支持用


ip地址 + 登录名/密码


连接的。操作方法如下

①.查看现有的SQL Server实例可供连接用的IP和对应的Port

步骤如下:

1.打开SQL Server Configuration Manager

2.点击网络配置

3.点击

TCP/IP

打开属性

4.点击

IP地址



5.IP地址列表如下


列表中有很多的IP地址,

重点关注IPV4的地址


确认IPv4地址【



IP Address



】下的【TCP Dynamic Ports】为

之前配置的防火墙规则准入的port

,以下以我配置的8877端口为例

防火墙的配置规则如下

②.查看本机ip的快捷方式

在确保

网络配置

的ip地址与端口的绑定关系无误后,就不必每次都根据①中步骤查看ip,用CMD快捷命令查看即可。


步骤如下:

1. win键 + R 并输入CMD唤起cmd.exe

2.在cmd框中输入“ipconfig”,打印

Windows IP 配置

3.检索

“以太网适配器 VMare Network

”且

子网掩码为“255.255.255.0

”的IPv4地址

如下图所示:

根据②步骤3中的条件检索到

符合条件(子网掩码:255.255.255.0)



ipv4地址,

本次共找到

两条符合要求的ipv4,如下图所示

③.填写ip地址 + port端口号 进行连接

经过以上步骤,我们已经得到了

用于连接的本机IP(②中获取)



端口号(自己配置的),

现在我们将这两个数据填到SSMS的“

服务器名称

”一栏中。


【错误填写方式】


在这一栏踩坑了,记录一下


按习惯,填写方式应该是

192.168.XX.XX:8877 (前端开发写习惯了- -)



填完以后发现怎么也连不上,如图:

提示

连接字符串无效    – -”


【正确填写方式】

想起之前远程连mysql的时候遇到了同样的问题,应该是格式错误了。


格式应该为:

192.168.XX.XX,8877


即 IPv4地址 , 端口号



中间是英文逗号,不是分号!



中间是英文逗号,不是分号!



中间是英文逗号,不是分号!

-还有一个问题,

之前检索出多个符合要求的ipv4地址,该填哪个?

-答:经测试,无论填哪个都能连接成功,任选即可

连接结果如下图:


三.使用Navicat连接

Navicat自带代码提示,快捷注释,写SQL还是比较爽的,所以尝试用Navicat远程连接一下。

点击Navicat的连接,似曾相识的界面又出现了,按要求填写连接参数


连接名:任取一个即可




主机: 同上一节中的“服务器名称”

,填写ip地址 + 端口号 ,


仍然用英文逗号分割



如下图所示:

点击确定,连接成功


四.使用sequelize(NodeJS)连接

1.理论部分

之前都是在数据管理工具里连接。既然有了ip地址和端口号配合TCP/IP协议,那么用程序连接也自然可以实现。

本次选用

nodeJS(v16.15.1)环境

+

sequelize ORM

为例实现连接,只需简单几行代码即可实现


本地环境要求:


node环境


npm包管理

node和npm的环境配置网上随便都能搜索到,这里不过多赘述了。


代码编写逻辑如下:

①.创建一个名为

index.js

的文件

②.初始化npm仓库 命令

:npm init


③.安装依赖:


npm install sequelize


npm install tedious  【安装后支持连接sqlserver】

④.导入Sequelize包(CJS规范导入)

⑤.配置连接数据库的参数db(host,port,username,password等..)

⑥.根据上一步的

配置参数

创建一个sequelize实例

⑦.测试连通性

⑧.进行简单的SQL语句查询


⑨.由于sequelize是promise风格的,最终结果需要用.then + callback获取结果(不了解promise的也没事,已经在源码中写好了)



特别说明




①.IPv4地址有时会发生变化

。我写了一个【getIPAddress】让程序自己获取当前电脑的ipv4地址,这样就不用每次都手动修改了。同时每次可能获取到

多个符合的ip地址

,取数组中的第一个。


②.

配置参数db

里的

“database”

一项该填什么?


答:看你连接的server下有什么数据库就填什么,没有可以新建一个



2.程序源码

const Sequelize = require("sequelize");
const os = require("os");

// 动态获取本机当前可用的ipv4地址
/**
 * @return {Array}  ipv4 address Array
 */
const getIPAddress = function () {
  var ifaces = os.networkInterfaces();
  var ip = [];
  for (var dev in ifaces) {
    ifaces[dev].forEach((details) => {
      if (
        details.family === "IPv4" && // ipv4过滤
        !details.internal &&  // 去除127.0.0.1 
        details.netmask === "255.255.255.0" // 子网掩码过滤
      ) {
        ip.push(details.address);
      }
    });
  }
  return ip || false;
};
var ip = getIPAddress()[0];

const db = {
  database: "wlw2020",  // 连接的数据库名称,需根据当前SQL server中已有的数据库填写
  username: "sa",  // 登录用户名
  password: "", //登录密码

  host: ip,  // 动态获取的ip
  port: "8877",  // 配置的端口
  dialect: "mssql",  // 标识为sql server
  // close log
  logging: false,
  // "timestamps: false" fixed Unknown column 'createdAt' in 'field list'
  timestamps: false,
  dialectOptions: {
    multipleStatements: true,
  },
};

const sequelize = new Sequelize(db);

sequelize.sync();
// 连通性检测
sequelize
  .authenticate()
  .then(() => {
    console.log("Connection has been established successfully.");
  })
  .catch((err) => {
    console.error("Unable to connect to the database:", err);
  });

// 进行简单的SQL语句查询测试
//query里换成自己的SQL语句
const query = sequelize.query("SELECT * FROM STUDENT"); // 返回一个promise
query.then(
  (value) => {
    console.log("value", value);
  },
  (err) => {
    console.log("err", err);
  }
);


3.运行结果

终于到了最后一步,在终端输入

node index.js,终于在终端看到了期待的结果


①.输入node index.js


②.看到下图②中的log代表连接成功


③.程序返回了SQL语句执行的结果(以SELECT * FROM STUDENT为例)

此次只演示了简单的SQL查询,sequelize官方提供了很多强大的功能,感兴趣的同学可自己尝试。放一个sequelize的官网


sequelize官网地址

写在最后:

开了这么多应用,终于把问题解决了

若在操作过程中遇到问题欢迎与我取得联系进行交流,共同学习。



版权声明:本文为SCY164759920原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。