无法从我的VS Code扩展(node.js)连接到SQL Server

时间:2019-05-05 12:53:27

标签: node.js sql-server typescript visual-studio-code vscode-extensions

我正在开发VS Code扩展,并希望从SQL Server数据库中获取一些数据。我尝试了许多不同的示例,但没有一个对我有用。

        const Connection = require('tedious').Connection;

        const config = {
            user: 'ssrs', // tried userName, username
            password: 'ssrs', 
            server: 'localhost',
            options: {
                database: 'imdb' 
            }
          }

          const connection = new Connection(config);
          connection.on('connect', function(err: string) {
            if (err) {
              console.log(err);
            } else {
              console.log('Connected');
            }
          });

OR

        await sql.connect('mssql://ssrs:ssrs@localhost/imdb')
        const result = await sql.query`select 1 as one`
        console.dir(result)

OR

    const sql = require("mssql");
    const conn = new sql.ConnectionPool({
        database: "imdb",
        server: "localhost",
        driver: "msnodesqlv8",
        userName: "ssrs",
        password: "ssrs"
    });

    conn.connect().then(() => {
        console.log('Connected');
    });
  

ConnectionError:用户”的登录失败。

enter image description here

通过sqlcmd连接:

enter image description here

该端口也已打开(1433),因为我可以远程登录到该端口。

SQL Server日志中的消息:

  

日期2019-05-08 11:19:02 AM记录SQL Server(当前-2019-05-05   下午2:53:00)

     

源登录

     

用户“”的消息登录失败。原因:尝试使用登录   SQL验证失败。服务器配置为集成   仅认证。 [客户:127.0.0.1]

     

日期2019-05-08 11:19:02 AM记录SQL Server(当前-2019-05-05   下午2:53:00)

     

源登录

     

消息错误:18456,严重性:14,状态:58。

尝试与Powershell连接:

  PS C:\WINDOWS\system32> Invoke-Sqlcmd -query "select CURRENT_USER, USER_NAME()" -ServerInstance "localhost" -username "ssrs" -password "ssrs" -Database 'imdb'

Column1 Column2
------- -------
ssrs    ssrs   

2 个答案:

答案 0 :(得分:1)

无法连接的原因记录在日志中:

  

原因:尝试使用SQL身份验证登录失败。服务器是   配置为仅用于集成身份验证。

您必须更改authentication mode(根据发布的屏幕快照已完成此操作),并重新启动带有代理的SQL Server服务。更改模式后您是否重新启动了服务?

答案 1 :(得分:1)

如屏幕截图所示,您可以通过SQLCMD实用程序进行连接。这意味着SQL Server中的用户或身份验证模式没有问题。 但是,错误消息具有误导性,并且其他用户已经遇到过此here

我不是node.js的专家,但我建议您更好地了解mssql插件和Connection对象的工作方式。我认为您的配置中缺少一些设置会使连接尝试失败。

例如,您发布的此代码是错误的(用户名无效):

const sql = require("mssql");
const conn = new sql.ConnectionPool({
    database: "imdb",
    server: "localhost",
    driver: "msnodesqlv8",
    userName: "ssrs",
    password: "ssrs"
});

conn.connect().then(() => {
    console.log('Connected');
});

应该是:

const sql = require("mssql");
const conn = new sql.ConnectionPool({
    database: "imdb",
    server: "localhost",
    driver: "msnodesqlv8",
    user: "ssrs",
    password: "ssrs"
});

conn.connect().then(() => {
    console.log('Connected');
});