【问题标题】:mssql node issue with named instance命名实例的 mssql 节点问题
【发布时间】:2021-02-15 22:48:36
【问题描述】:

我正在尝试使用 mssql 节点包连接到 Microsoft SQL Server (MSSQL) 数据库。它不是默认实例,它使用 Windows 身份验证。我正在运行 Windows 10 x64,我尝试访问的数据库是由第 3 方软件安装的,它是一个 SQL Server 2008 x86 实例。不确定这是否是问题的一部分,但在 SQL Management Studio 中,属性菜单显示此数据库的操作系统是 Microsoft Windows NT 6.2 (9200),产品是 Microsoft SQL Server Express Edition。名称是 2JBBK72-E7450\SHOPSTREAM,相同的值列在 Server 下的 Connection 窗格中。在 Connection 下的 Connection 窗格中是 2JBBK72-E7450\sjay5。我不确定数据库是在 SQL Server 身份验证还是 Windows 身份验证模式下设置的。 SQL Management Studio 中的服务器属性说两者都已启用,但我不知道 SQL 用户名和密码是什么。

这里是 mssql npm 包的文档:https://www.npmjs.com/package/mssql

这是我的 node.js 代码:

const sql = require('mssql');

const config = {
  driver: 'msnodesqlv8',
  // user: 'root',
  // password: 'password',
  // server: 'localhost\\2JBBK72-E7450\\SHOPSTREAM', // You can use 'localhost\\instance' to connect to named instance
  // server: 'localhost', // You can use 'localhost\\instance' to connect to named instance
  database: 'ShopMgtDemo',
  // connectionString: 'Server=2JBBK72-E7450\\SHOPSTREAM;Database=ShopMgtDemo;Trusted_Connection=Yes;',
  // connectionString: 'Driver={SQL Server Native Client 11.0};Server=2JBBK72-E7450\\SHOPSTREAM;',
    // default connection string: 'Driver={SQL Server Native Client 11.0};Server={#{server}\\#{instance}};Database={#{database}};Uid={#{user}};Pwd={#{password}};Trusted_Connection={#{trusted}};'
  options: {
    instanceName: '2JBBK72-E7450\\SHOPSTREAM',
    // instanceName: 'SHOPSTREAM',
    trustedConnection: true,
  },
};

// const uri = 'mssql://localhost/2JBBK72-E7450/SHOPSTREAM/ShopMgtDemo?driver=msnodesqlv8';
// const connectionString = 'Driver=msnodesqlv8;Server=(local)\\2JBBK72-E7450\\SHOPSTREAM;Database=ShopMgtDemo;';
  // default connection string: 'Driver=msnodesqlv8;Server=(local)\INSTANCE;Database=database;UID=DOMAIN\username;PWD=password;Encrypt=true;';

sql.connect(config).then(
  () => (
    new sql.Request()
    .query('select * from SM.RepairOrder')
    .then(recordset => console.dir(recordset))
    .catch(err => console.error(err))
  ),
  err => console.error(err)
)
.catch(err => console.error(err));

当我运行它时,我收到以下错误:

{ ConnectionError: [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
    at C:\Users\sjay5\Code\mitchell-sql-feathers\node_modules\mssql\lib\msnodesqlv8.js:222:25
    at Immediate._onImmediate (C:\Users\sjay5\Code\mitchell-sql-feathers\node_modules\msnodesqlv8\lib\ConnectionWrapper.js:343:21)
    at tryOnImmediate (timers.js:543:15)
    at processImmediate [as _immediateCallback] (timers.js:523:5)
  name: 'ConnectionError',
  message: '[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified',
  code: 0 }

【问题讨论】:

    标签: sql-server node.js sql-server-2008


    【解决方案1】:

    问题是我的驱动程序版本不同;我有 10.0,默认情况下它期望 11.0。此外,我能够让配置的 connectionString 属性正常工作。

    我让它与以下代码一起工作:

    const sql = require('mssql');
    
    const config = {
      driver: 'msnodesqlv8',
      connectionString: 'Driver={SQL Server Native Client 10.0};Server={2JBBK72-E7450\\SHOPSTREAM};Database={ShopMgtDemo};Trusted_Connection={yes}',
    };
    
    sql.connect(config).then(
      () => (
        new sql.Request()
        .query('select * from SM.RepairOrder')
        .then(recordset => console.dir(recordset))
        .catch(err => console.error(err))
      ),
      err => console.error(err)
    )
    .catch(err => console.error(err));
    

    【讨论】:

      【解决方案2】:

      您必须在 Windows 机器上安装 SQL Server Native Client。 请按照以下步骤操作:

      安装说明位于:https://www.microsoft.com/en-us/download/details.aspx?id=29065 部分:“MICROSOFT SQL SERVER CONNECTIVITY FEATURE PACK COMPONENTS

      要检查客户端是否正确安装,请按照以下步骤操作:

      1. 转到“开始”
      2. 点击“控制面板”
      3. 点击“管理工具”
      4. 双击“数据源 (ODBC)”
      5. 单击“驱动程序”选项卡并确保在 名称为“SQL Server Native Client 11.0”的列表

      【讨论】:

        【解决方案3】:

        如果你想通过单独的配置值(不是连接字符串)连接到 SQL Server,你可以使用这个:

        var config = {
            user: 'devuser',
            password: 'devuser',
            server: 'GRIFF',
            database: 'devdb',
            port: 1433,
            debug: true,
            options: {
                encrypt: false ,
                instanceName: 'SQLEXPRESS'
            }
        }
        

        所以而不是:

        服务器:'localhost/SQLEXPRESS'

        您必须在“选项”部分设置实例名称。

        【讨论】:

          猜你喜欢
          • 2020-05-16
          • 2011-08-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-07-24
          • 2014-10-13
          • 1970-01-01
          相关资源
          最近更新 更多