命名实例的mssql节点问题

时间:2016-08-03 21:41:39

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

我尝试使用mssql节点包连接到Microsoft SQL Server(MSSQL)数据库。它不是默认实例,它使用Windows身份验证。我正在运行Windows 10 x64,我尝试访问的数据库是由第三方软件安装的,它是一个SQL Server 2008 x86实例。不确定这是否是问题的一部分,但在SQL Management Studio中,属性菜单显示此数据库的操作系统是Microsoft Windows NT 6.2(9200),而产品是Microsoft SQL Server Express Edition。名称为2JBBK72-E7450 \ SHOPSTREAM,并且“服务器”下的“连接”窗格中列出了相同的值。在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 }

3 个答案:

答案 0 :(得分:2)

问题是我有不同的驱动程序版本;我有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));

答案 1 :(得分:2)

您必须在Windows计算机上安装SQL Server Native Client。 请按照下面的步骤进行操作:

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

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

  1. 转到"开始"
  2. 点击"控制面板"
  3. 点击"管理工具"
  4. 双击"数据源(ODBC)"
  5. 点击" Drivers"选项卡,并确保有一个项目 列表名称为" SQL Server Native Client 11.0"

答案 2 :(得分:1)

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

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

所以代替:

<块引用>

服务器:'本地主机/SQLEXPRESS'

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