快速入门:使用 Node.js 查询 Azure SQL 数据库中的数据库或 Azure SQL 托管实例

适用于:Azure SQL 数据库Azure SQL 托管实例

本快速入门将使用 Node.js 连接到数据库并查询数据。

先决条件

若要完成本快速入门,你需要:


重要

编写本文中的脚本是为了使用 AdventureWorks 数据库。

获取服务器连接信息

获取连接到数据库所需的连接信息。 在后续步骤中,将需要完全限定的服务器名称/主机名称、数据库名称和登录信息。

  1. 登录 Azure 门户

  2. 转到“SQL 数据库”或“SQL 托管实例”页。

  3. 在“概述”页上,在“Server 名称”旁查看 Azure SQL 数据库中的数据库的完全限定服务器名称,或在“Host”旁边查看 Azure VM 上的 Azure SQL 托管实例或 SQL Server 的完全限定服务器名称(或 IP 地址) 。 若要复制服务器名称或主机名称,请将鼠标悬停在其上方,然后选择“复制”图标。

注意

有关 Azure VM 上的 SQL Server 的连接信息,请参阅连接到 SQL Server

创建项目

打开命令提示符,然后创建一个名为 sqltest 的文件夹。 打开已创建的文件夹,并运行以下命令:

npm init -y
npm install mssql

添加用于查询数据库的代码

  1. 在偏好的文本编辑器中,在创建项目的文件夹 (sqltest) 中创建一个新文件 sqltest.js。

  2. 将其内容替换为以下代码。 然后,为服务器、数据库、用户和密码添加相应的值。

    const sql = require('mssql');
    
    const config = {
        user: 'username', // better stored in an app setting such as process.env.DB_USER
        password: 'password', // better stored in an app setting such as process.env.DB_PASSWORD
        server: 'your_server.database.chinacloudapi.cn', // better stored in an app setting such as process.env.DB_SERVER
        port: 1433, // optional, defaults to 1433, better stored in an app setting such as process.env.DB_PORT
        database: 'AdventureWorksLT', // better stored in an app setting such as process.env.DB_NAME
        authentication: {
            type: 'default'
        },
        options: {
            encrypt: true
        }
    }
    
    /*
        //Use Azure VM Managed Identity to connect to the SQL database
        const config = {
            server: process.env["db_server"],
            port: process.env["db_port"],
            database: process.env["db_database"],
            authentication: {
                type: 'azure-active-directory-msi-vm'
            },
            options: {
                encrypt: true
            }
        }
    
        //Use Azure App Service Managed Identity to connect to the SQL database
        const config = {
            server: process.env["db_server"],
            port: process.env["db_port"],
            database: process.env["db_database"],
            authentication: {
                type: 'azure-active-directory-msi-app-service'
            },
            options: {
                encrypt: true
            }
        }
    */
    
    console.log("Starting...");
    connectAndQuery();
    
    async function connectAndQuery() {
        try {
            var poolConnection = await sql.connect(config);
    
            console.log("Reading rows from the Table...");
            var resultSet = await poolConnection.request().query(`SELECT TOP 20 pc.Name as CategoryName,
                p.name as ProductName 
                FROM [SalesLT].[ProductCategory] pc
                JOIN [SalesLT].[Product] p ON pc.productcategoryid = p.productcategoryid`);
    
            console.log(`${resultSet.recordset.length} rows returned.`);
    
            // output column headers
            var columns = "";
            for (var column in resultSet.recordset.columns) {
                columns += column + ", ";
            }
            console.log("%s\t", columns.substring(0, columns.length - 2));
    
            // ouput row contents from default record set
            resultSet.recordset.forEach(row => {
                console.log("%s\t%s", row.CategoryName, row.ProductName);
            });
    
            // close connection only when we're certain application is finished
            poolConnection.close();
        } catch (err) {
            console.error(err.message);
        }
    }
    

注意

有关使用托管标识进行身份验证的详细信息,请完成关于通过托管标识访问数据的教程。 有关 Microsoft Entra ID(旧称 Azure Active Directory)的 Tedious 配置选项的详细信息,请参阅 Tedious 文档

运行代码

  1. 在命令提示符下运行此程序。

    node sqltest.js
    
  2. 验证是否已返回前 20 行,然后关闭应用程序窗口。

后续步骤