使用 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. 注意事项

  1. 数据库安全:避免 SQL 注入,使用参数化查询。
  2. 错误处理:确保捕获错误并适当处理,特别是在生产环境。
  3. 连接池mssql 默认支持连接池,但需要注意资源释放。
  4. 事务支持:如果需要复杂的操作,可以通过 Transaction 类实现事务管理。

通过这些代码和步骤,我们就可以使用 Node.js 连接 SQL Server 并实现基本的增删改查功能了。