最近看了下NodeJS下连接SQLServer的一些示例,发现NodeJs中有两个模块,一个是mssql,其npm地址是:https://www.npmjs.com/package/mssql;另外一个是:tedious,其npm地址是:https://www.npmjs.com/package/tedious,github对应的地址是:https://github.com/tediousjs/tedious
一、使用mssql连接SQLServer数据库
1、创建数据库UserDB,再创建t_user表,为t_user表添加一些数据
我在自己的Window10系统中已经安装了SQLServer 2012,本人还是习惯使用Navicat Premium 12这个数据库客户端软件,觉得SQL Server Management Studio相对笨重一些。在Navicat Premium 12中连接SQLServer数据库后,创建一个数据库比如说UserDB,再为它一个t_user表,其结构如下图所示:
给t_user添加几条数据,如下图所示:
完整的SQL脚本如下:
代码语言:javascript复制/*
Navicat Premium Data Transfer
Source Server : localhost_SqlServer
Source Server Type : SQL Server
Source Server Version : 11002100
Source Host : localhost:1433
Source Catalog : UserDB
Source Schema : dbo
Target Server Type : SQL Server
Target Server Version : 11002100
File Encoding : 65001
Date: 06/03/2020 07:50:41
*/
-- ----------------------------
-- Table structure for t_user
-- ----------------------------
IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[t_user]') AND type IN ('U'))
DROP TABLE [dbo].[t_user]
GO
CREATE TABLE [dbo].[t_user] (
[name] varchar(255) COLLATE Chinese_PRC_CI_AS NULL,
[age] int NULL,
[sex] tinyint NULL
)
GO
ALTER TABLE [dbo].[t_user] SET (LOCK_ESCALATION = TABLE)
GO
-- ----------------------------
-- Records of t_user
-- ----------------------------
INSERT INTO [dbo].[t_user] VALUES (N'小明', N'23', N'1')
GO
INSERT INTO [dbo].[t_user] VALUES (N'王五', N'21', N'1')
GO
INSERT INTO [dbo].[t_user] VALUES (N'小红', N'20', N'0')
GO
INSERT INTO [dbo].[t_user] VALUES (N'小丽', N'22', N'0')
GO
2、使用mssql模块连接SQLServer数据库
使用mssql之前安装对应的依赖包
代码语言:javascript复制npm install mssql
代码语言:javascript复制// mssql模块的简单使用
// https://www.npmjs.com/package/mssql
var sql = require('mssql');
// DB configuration
var dbConfig = {
user: 'sa',
password: '1030',
server: 'localhost',
database: 'UserDB',
port: 1433,
pool: {
max: 10,
min: 0,
idleTimeoutMillis: 30000
}
};
// 查询所有的用户信息
function getAllUsers() {
var conn = new sql.ConnectionPool(dbConfig);
//console.log(conn);
var req = new sql.Request(conn);
conn.connect(function (err) {
if (err) {
console.log(err);
return;
}
// 查询t_user表
req.query("SELECT * FROM t_user", function (err, recordset) {
if (err) {
console.log(err);
return;
}
else {
console.log(recordset);
}
conn.close();
});
});
}
// 查询所有的用户信息
getAllUsers();
在Viusal Studio Code中运行结果截图如下图所示:
使用tedious连接SQLServer数据库
Node TDS module for connecting to SQL Server databases. http://tediousjs.github.io/tedious/ 关于tedious的使用,github和npmjs上介绍得很简单,可以参考官网提供的5个示例程序https://github.com/tediousjs/tedious/tree/master/examples,就是minimal.js 、simple-client.js、parameters.js、storedProcedureWithParameters.js、bulkLoad-sample.js 在VSCode的命令行下安装tedious模块,如下:
代码语言:javascript复制npm install tedious
示例代码如下:
代码语言:javascript复制var Connection = require('tedious').Connection
var Request = require('tedious').Request
var config = {
userName: 'your_username', // update me
password: 'your_password', // update me
server: 'localhost'
}
var connection = new Connection(config)
connection.on('connect', function (err) {
if (err) {
console.log(err)
} else {
executeStatement()
}
})
function executeStatement () {
request = new Request("select 123, 'hello world'", function (err, rowCount) {
if (err) {
console.log(err)
} else {
console.log(rowCount ' rows')
}
connection.close()
})
request.on('row', function (columns) {
columns.forEach(function (column) {
if (column.value === null) {
console.log('NULL')
} else {
console.log(column.value)
}
})
})
connection.execSql(request)
}
Express中集成数据库
Express中集成数据库比较方便,具体可参考Express中文网的数据库集成:Express-Database integration
使用tedious连接SQLServer数据库的示例程序
- 1.在喜欢的文本编辑器中,创建新文件 sqltest.js。
- 2.将其内容替换为以下代码。 然后,为服务器、数据库、用户和密码添加相应的值。
const { Connection, Request } = require("tedious");
// Create connection to database
const config = {
authentication: {
options: {
userName: "username", // update me
password: "password" // update me
},
type: "default"
},
server: "your_server.database.chinacloudapi.cn", // update me
options: {
database: "your_database", //update me
encrypt: true
}
};
const connection = new Connection(config);
// Attempt to connect and execute queries if connection goes through
connection.on("connect", err => {
if (err) {
console.error(err.message);
} else {
queryDatabase();
}
});
function queryDatabase() {
console.log("Reading rows from the Table...");
// Read all rows from table
const request = new Request(
`SELECT TOP 20 pc.Name as CategoryName,
p.name as ProductName
FROM [SalesLT].[ProductCategory] pc
JOIN [SalesLT].[Product] p ON pc.productcategoryid = p.productcategoryid`,
(err, rowCount) => {
if (err) {
console.error(err.message);
} else {
console.log(`${rowCount} row(s) returned`);
}
}
);
request.on("row", columns => {
columns.forEach(column => {
console.log("%st%s", column.metadata.colName, column.value);
});
});
connection.execSql(request);
}
参考资料:
- Express-Database integration
- 快速入门:使用 Node.js 查询 Azure SQL 数据库