gpt4 book ai didi

sql-server - 在 Linux/Ubuntu 上使用 Nodejs + MSSQL

转载 作者:行者123 更新时间:2023-12-04 18:46:39 24 4
gpt4 key购买 nike

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

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

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

  • 更新了我的 ~/.profile,为:

  •   ~$ export ODBCINI=/etc/odbc.ini
    ~$ export ODBCSYSINI=/etc
    ~$ export FREETDSCONF=/etc/freetds/freetds.conf

  • 注销笔记本电脑,以激活上述内容,并刷新配置文件。
  • 安装了所需的连接包。

  •   ~$ sudo apt-get install unixodbc unixodbc-dev freetds-dev sqsh tdsodbc -y

  • 配置 FreeTDS

  •   ~$ sudo gedit /etc/freetds/freetds.conf

    [ACUMENSERVER]
    host = 192.168.0.10
    port = 1433
    tds version = 7.0

  • 用 sqsh 测试了 FreeTDS 连接,它工作正常:

  •   ~$ sqsh -S ACUMENSERVER -U mssql-username -P mssql-password

  • 配置的 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

  • 配置的 ODBC - odbc.ini:

  • ~$ sudo gedit /etc/odbc.ini

    [ACUMENSERVER]
    Driver = FreeTDS
    Description = ODBC connection via FreeTDS
    Trace = No
    Servername = ACUMENSERVER
    Database = myDataBase

  • 用 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 连接。

    最佳答案

    我发现如果使用服务器的 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,您将无法通过 Node 连接

    然后:

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

    关于sql-server - 在 Linux/Ubuntu 上使用 Nodejs + MSSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34725523/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com