jjzjj

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

SCY164759920 2024-02-23 原文

一.配置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官网地址

写在最后:

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

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

有关远程连接SQL Server数据库(基于Sequelize / Navicat)的更多相关文章

  1. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  2. ruby - 续集在添加关联时访问many_to_many连接表 - 2

    我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以

  3. ruby - 无法在 60 秒内获得稳定的 Firefox 连接 (127.0.0.1 :7055) - 2

    我使用的是Firefox版本36.0.1和Selenium-Webdrivergem版本2.45.0。我能够创建Firefox实例,但无法使用脚本继续进行进一步的操作无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055)错误。有人能帮帮我吗? 最佳答案 我遇到了同样的问题。降级到firefoxv33后一切正常。您可以找到旧版本here 关于ruby-无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055),我们在StackOverflow上找到一个类

  4. ruby - Ruby 有 `Pair` 数据类型吗? - 2

    有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳

  5. ruby - 我如何添加二进制数据来遏制 POST - 2

    我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_

  6. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  7. 叮咚买菜基于 Apache Doris 统一 OLAP 引擎的应用实践 - 2

    导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵

  8. FOHEART H1数据手套驱动Optitrack光学动捕双手运动(Unity3D) - 2

    本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01  客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02  数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit

  9. 使用canal同步MySQL数据到ES - 2

    文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co

  10. 基于C#实现简易绘图工具【100010177】 - 2

    C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.

随机推荐