【问题标题】:Working with Nodejs + MSSQL at Linux / Ubuntu在 Linux / Ubuntu 上使用 Nodejs + MSSQL
【发布时间】:2016-01-11 15:44:02
【问题描述】:

我的 nodejs 应用程序连接到 MSSQL 服务器,在我的 Windows 笔记本电脑上完美运行,唱歌 mssql@npm

同一应用无法在我的 Ubuntu 笔记本电脑中看到数据库。

我在 Ubuntu 中定义了 mssql 连接如下,我错过了什么吗?

  1. 更新了我的 ~/.profile,如下:
  ~$ export ODBCINI=/etc/odbc.ini
  ~$ export ODBCSYSINI=/etc
  ~$ export FREETDSCONF=/etc/freetds/freetds.conf
  1. 注销笔记本电脑,以激活上述内容,并刷新配置文件。

  2. 已安装所需的连接包。

  ~$ sudo apt-get install unixodbc unixodbc-dev freetds-dev sqsh tdsodbc -y
  1. 配置的 FreeTDS
  ~$ sudo gedit /etc/freetds/freetds.conf

   [ACUMENSERVER]
   host = 192.168.0.10
   port = 1433
   tds version = 7.0
  1. 用 sqsh 测试了 FreeTDS 连接,它工作正常:
  ~$ sqsh -S ACUMENSERVER -U mssql-username -P mssql-password
  1. 已配置 ODBC - odbcinst.ini:
  ~$ sudo gedit /etc/odbcinst.ini

     [FreeTDS]
     Description     = TDS driver (Sybase/MS SQL)
     Driver          = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
     Setup           = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
     CPTimeout       =
     CPReuse         =
     FileUsage       = 1
  1. 配置的 ODBC - odbc.ini:
~$ sudo gedit /etc/odbc.ini

   [ACUMENSERVER]
      Driver          = FreeTDS
      Description     = ODBC connection via FreeTDS
      Trace           = No
      Servername      = ACUMENSERVER
      Database        = myDataBase
  1. 用 isql 测试了 ODBC 连接,效果很好:
isql -v ACUMENSERVER mssql-username mssql-passward

当我运行我的 nodejs 应用程序(在 Windows 中运行良好)时,我在 Ubuntu 中遇到以下错误,考虑到上述所有操作都已完成,并检查:

{ name: 'ConnectionError',
  message: 'Failed to connect to ACUMENSERVER:1433 - getaddrinfo ENOTFOUND',
  code: 'ESOCKET' }

这里可能有什么错误/遗漏的东西,我愿意使用另一个 npm 包进行 mssql 连接。

【问题讨论】:

    标签: sql-server node.js ubuntu freetds unixodbc


    【解决方案1】:

    我发现如果使用服务器的IP地址,这可以工作,服务器名称不起作用!

    下面对我有用:

    1 安装 mssql:

    npm install mssql
    

    2 index.js 文件:

    var sql = require('mssql');
    
    var config = {
        user: 'sa',
        password: 'sql@123',
    //  server: 'myServername',  --> Not Working
    //  server: 'ACUMENSERVER',  --> Not Working
        server: '6192.168.0.10', // WORKED
        database: 'myDB'
    }
    
    sql.connect(config).then(function() { 
    // Query 
    
    new sql.Request().query('select top 1 itemcode from OITM').then(function(recordset) {
        console.dir(recordset);
        }).catch(function(err) {console.log(err); /* ... query error checks ... */ });
    
    
    // Stored Procedure 
    
    new sql.Request()
        .input('input_parameter', sql.Int, value)
        .output('output_parameter', sql.VarChar(50))
        .execute('procedure_name').then(function(recordset) {
             console.dir(recordset);
         }).catch(function(err) {console.log(err); /* ... execute error checks ... */ });
    
    
    
    }).catch(function(err) {console.log(err); /* ... connect error checks ... */ });
    

    更新Michael J. Ryan

    您可能需要myServer 的 DNS 解析器。在 Windows 之外,您将无法获得 netbios 名称解析...无论您输入什么作为服务器名称,如果您无法从命令提示符 ping myserver,您将无法通过节点连接

    然后:

    或者使用上面提到的 IP(这意味着根本不需要安装 ODBCunix 和 FreeTDS),或者有一个用于本地网络的内部 DNS 并使用完整的 ADS 名称...myserver.domain.name 应该可以解决(假设 ADS 用作本地解析的 dns 主机)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-15
      • 2016-04-01
      • 1970-01-01
      • 2014-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-18
      相关资源
      最近更新 更多