使用 Node.js 连接 SQL Server 并实现基本的增删改查功能,可以使用微软提供的 mssql
库。以下是具体步骤和代码示例。
1. 安装必要的包
首先,确保安装了以下必要的包:
npm install mssql
2. 数据库连接配置
创建一个配置文件或直接在代码中定义数据库连接信息。例如:
const sqlConfig = {
user: 'your_username', // 数据库用户名
password: 'your_password', // 数据库密码
database: 'your_database', // 数据库名称
server: 'your_server', // 数据库服务器地址
options: {
encrypt: true, // 如果使用 Azure SQL Server,需设置为 true
trustServerCertificate: true // 如果本地开发,需设置为 true
}
};
3. 创建数据库操作模块
实现增删改查的核心代码如下:
const sql = require('mssql');
// 数据库连接初始化
async function connectToDB() {
try {
const pool = await sql.connect(sqlConfig);
console.log('Connected to the database.');
return pool;
} catch (err) {
console.error('Database connection failed:', err);
throw err;
}
}
// 查询数据
async function queryData(query, params = []) {
try {
const pool = await connectToDB();
const request = pool.request();
params.forEach(param => {
request.input(param.name, param.type, param.value);
});
const result = await request.query(query);
console.log('Query Result:', result.recordset);
return result.recordset;
} catch (err) {
console.error('Error querying data:', err);
throw err;
}
}
// 插入数据
async function insertData(query, params = []) {
try {
const pool = await connectToDB();
const request = pool.request();
params.forEach(param => {
request.input(param.name, param.type, param.value);
});
const result = await request.query(query);
console.log('Data inserted:', result.rowsAffected);
return result.rowsAffected;
} catch (err) {
console.error('Error inserting data:', err);
throw err;
}
}
// 更新数据
async function updateData(query, params = []) {
try {
const pool = await connectToDB();
const request = pool.request();
params.forEach(param => {
request.input(param.name, param.type, param.value);
});
const result = await request.query(query);
console.log('Data updated:', result.rowsAffected);
return result.rowsAffected;
} catch (err) {
console.error('Error updating data:', err);
throw err;
}
}
// 删除数据
async function deleteData(query, params = []) {
try {
const pool = await connectToDB();
const request = pool.request();
params.forEach(param => {
request.input(param.name, param.type, param.value);
});
const result = await request.query(query);
console.log('Data deleted:', result.rowsAffected);
return result.rowsAffected;
} catch (err) {
console.error('Error deleting data:', err);
throw err;
}
}
4. 示例用法
以下是增删改查的示例调用:
const sql = require('mssql');
const { queryData, insertData, updateData, deleteData } = require('./dbOperations');
// 查询示例
async function getUsers() {
const query = 'SELECT * FROM Users';
const users = await queryData(query);
console.log(users);
}
// 插入示例
async function addUser() {
const query = 'INSERT INTO Users (name, age) VALUES (@name, @age)';
const params = [
{ name: 'name', type: sql.NVarChar, value: 'John Doe' },
{ name: 'age', type: sql.Int, value: 30 },
];
const result = await insertData(query, params);
console.log(result);
}
// 更新示例
async function updateUser() {
const query = 'UPDATE Users SET age = @age WHERE name = @name';
const params = [
{ name: 'name', type: sql.NVarChar, value: 'John Doe' },
{ name: 'age', type: sql.Int, value: 35 },
];
const result = await updateData(query, params);
console.log(result);
}
// 删除示例
async function deleteUser() {
const query = 'DELETE FROM Users WHERE name = @name';
const params = [
{ name: 'name', type: sql.NVarChar, value: 'John Doe' },
];
const result = await deleteData(query, params);
console.log(result);
}
// 调用示例
(async () => {
await addUser();
await getUsers();
await updateUser();
await getUsers();
await deleteUser();
await getUsers();
})();
5. 注意事项
- 数据库安全:避免 SQL 注入,使用参数化查询。
- 错误处理:确保捕获错误并适当处理,特别是在生产环境。
- 连接池:
mssql
默认支持连接池,但需要注意资源释放。 - 事务支持:如果需要复杂的操作,可以通过
Transaction
类实现事务管理。
通过这些代码和步骤,我们就可以使用 Node.js 连接 SQL Server 并实现基本的增删改查功能了。