我尝试使用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 }
答案 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组件"
要检查客户端是否已正确安装,请按照以下步骤操作:
答案 2 :(得分:1)
如果你想通过分离的配置值(不是连接字符串)连接到 SQL Server,你可以使用这个:
var config = {
user: 'devuser',
password: 'devuser',
server: 'GRIFF',
database: 'devdb',
port: 1433,
debug: true,
options: {
encrypt: false ,
instanceName: 'SQLEXPRESS'
}
}
所以代替:
<块引用>服务器:'本地主机/SQLEXPRESS'
您必须在“选项”部分设置实例名称。