为啥我不能将 SQL Server 连接到我的节点 js

Posted

技术标签:

【中文标题】为啥我不能将 SQL Server 连接到我的节点 js【英文标题】:Why Can't I connect SQL Server to my node js为什么我不能将 SQL Server 连接到我的节点 js 【发布时间】:2020-09-20 08:19:22 【问题描述】:

我正在使用“mssql”npm 包将我的 SQL 服务器连接到我的节点 JS。 我问了几个问题,但都没有解决。

我的 SQL Server 登录凭据是-

server type : Database Engine
Server name : DESKTOP-MPF88ST\KUSHAL 
authentication : sql server authentication 
login : username 
password : password

我想要的数据库是 schoolDB 我的代码是这样的

const sql =require("mssql")

const config = 
        login: 'username',
        password:'password',
        server: 'localhost',
        database: "schoolDB",
        options : 
            enableArithAbort: true
        ,
        port : 1433


sql.connect(config, (err) => 
        if(err)
            console.log(err);
        
        else 
            console.log("Connected")
        

我启用并设置了我的 TCP/IP,启用了 SQL Server 浏览器,但它仍然抛出错误-

ConnectionError: Failed to connect to localhost:1433 - Could not connect (sequence)
    at Connection.<anonymous> (E:\Kushals\server\node_modules\mssql\lib\tedious\connection-pool.js:68:17)
    at Object.onceWrapper (events.js:422:26)
    at Connection.emit (events.js:315:20)
    at Connection.socketError (E:\Kushals\server\node_modules\mssql\node_modules\tedious\lib\connection.js:1290:12)
    at E:\Kushals\server\node_modules\mssql\node_modules\tedious\lib\connection.js:1116:21    
    at SequentialConnectionStrategy.connect (E:\Kushals\server\node_modules\mssql\node_modules\tedious\lib\connector.js:87:14)
    at Socket.onError (E:\Kushals\server\node_modules\mssql\node_modules\tedious\lib\connector.js:100:12)
    at Socket.emit (events.js:315:20)
    at emitErrorNT (internal/streams/destroy.js:92:8)
    at emitErrorAndCloseNT (internal/streams/destroy.js:60:3) 
  code: 'ESOCKET',
  originalError: ConnectionError: Failed to connect to localhost:1433 - Could not connect (sequence)
      at ConnectionError (E:\Kushals\server\node_modules\mssql\node_modules\tedious\lib\errors.js:13:12)
      at Connection.socketError (E:\Kushals\server\node_modules\mssql\node_modules\tedious\lib\connection.js:1290:56)
      at E:\Kushals\server\node_modules\mssql\node_modules\tedious\lib\connection.js:1116:21  
      at SequentialConnectionStrategy.connect (E:\Kushals\server\node_modules\mssql\node_modules\tedious\lib\connector.js:87:14)
      at Socket.onError (E:\Kushals\server\node_modules\mssql\node_modules\tedious\lib\connector.js:100:12)
      at Socket.emit (events.js:315:20)
      at emitErrorNT (internal/streams/destroy.js:92:8)
      at emitErrorAndCloseNT (internal/streams/destroy.js:60:3)
      at processTicksAndRejections (internal/process/task_queues.js:84:21) 
    code: 'ESOCKET'
  

我该如何解决??

【问题讨论】:

您的服务器名称是DESKTOP-MPF88ST\KUSHAL,但您指定了本地主机。您需要指定server : "DESKTOP-MPF88ST\KUSHAL" @PrebenHuybrechts 也尝试过这样做......没有帮助。仍然是完全相同的错误.... @Preben 在命令行中 ping DESKTOP-MPF88ST 看看你得到了什么,那是你所在的机器吗?当你不再使用 localhost 时,你怎么能得到完全相同的错误? 我认为你们没有得到它,当您启动 SQL Server Management Studio 时,您被要求登录,“服务器名称”字段设置为该值。那可能不是真正的服务器,我ping了一下,cmd说Ping request could not find host DESKTOP-MPF88ST\KUSHAL. Please check the name and try again. @KushalChowdhury 您被要求 ping 计算机名称 DESKTOP-MPF88ST,而不是服务器实例名称 DESKTOP-MPF88ST\KushAL。 【参考方案1】:

试试这个:

const sql = require('mssql/msnodesqlv8')

const pool = new sql.ConnectionPool(
  login: 'username',
  password:'password',
  database: 'schoolDB',
  server: 'DESKTOP-MPF88ST\KUSHAL',
  driver: 'msnodesqlv8',
  options: 
    trustedConnection: true
  
)

pool.connect().then(() => 
  //sample query
  pool.request().query('select 1 as number', (err, result) => 
        console.dir(result)
    )
)

【讨论】:

不,兄弟,它崩溃了,说找不到模块 msnodesqlv8 所以用 npm 安装它? 啊,抱歉,没有意识到这是一个不同的包。是的,现在它正在工作。非常感谢 !!另外,你能帮我找出我的代码到底出了什么问题吗?? 使用默认驱动你根本无法通过 windows 域登录 @KushalChowdhury 别忘了您也输入了错误的连接信息。【参考方案2】:

确保 TCP/IP 协议已启用,因为它默认处于禁用状态。

步骤:

    进入计算机管理

    在服务和应用程序下 -> SQL Server 配置管理器 -> SQL Server 网络配置 -> 点击“Protocols for MSSQLSERVER”

    您将看到 TCP/IP 部分(启用右键单击并启用它)

【讨论】:

我启用了 TCP/IP,我在很多地方都看到了它,这就是为什么我先配置它,我在帖子中也提到过。

以上是关于为啥我不能将 SQL Server 连接到我的节点 js的主要内容,如果未能解决你的问题,请参考以下文章

tsql 实用程序 (FreeTDS) 可以连接到 SQL Server,但 pymssql 不能

无法将 jdbc 连接到 sql server 2008 r2

为啥我的一些 kubernetes 节点无法连接到我的 postgres 集群而其他节点成功?

使用 Windows 身份验证将我的 Sql Server 2008 数据库连接到我的 Java 项目

连接到 SQL Server

如何将 PHP 连接到 SQL Server?