MSDN Tutorials

Develop Applications with Azure SQL

Learn how to build robust, scalable applications that leverage Azure SQL Database. This tutorial walks you through setting up the environment, writing data‑access code, and deploying your app securely.

Prerequisites

1. Create a New Project

Open your terminal and run:

dotnet new webapi -n AzureSqlDemo
cd AzureSqlDemo

Or, for Node.js:

mkdir azure-sql-demo
cd azure-sql-demo
npm init -y
npm install mssql dotenv

2. Configure the Connection String

Create a .env file (Node.js) or add appsettings.json (C#) with your Azure SQL credentials.

# .env (Node.js)
DB_SERVER=your_server.database.windows.net
DB_USER=your_user
DB_PASSWORD=your_password
DB_DATABASE=your_db
{
  "ConnectionStrings": {
    "AzureSql": "Server=tcp:your_server.database.windows.net,1433;Initial Catalog=your_db;Persist Security Info=False;User ID=your_user;Password=your_password;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"
  }
}

3. Sample Data‑Access Code

Below is a simple CRUD API using ASP.NET Core:

using Microsoft.Data.SqlClient;
using Dapper;

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

app.UseSwagger();
app.UseSwaggerUI();

string connStr = builder.Configuration.GetConnectionString("AzureSql");

app.MapGet("/products", async () => {
    using var connection = new SqlConnection(connStr);
    var result = await connection.QueryAsync<Product>("SELECT * FROM Products");
    return Results.Ok(result);
});

app.MapPost("/products", async (Product p) => {
    using var connection = new SqlConnection(connStr);
    var sql = "INSERT INTO Products (Name, Price) VALUES (@Name, @Price)";
    await connection.ExecuteAsync(sql, p);
    return Results.Created($"/products/{p.Name}", p);
});

app.Run();

public record Product(int Id, string Name, decimal Price);

Node.js version with mssql:

require('dotenv').config();
const sql = require('mssql');
const express = require('express');
const app = express();
app.use(express.json());

const config = {
  server: process.env.DB_SERVER,
  user: process.env.DB_USER,
  password: process.env.DB_PASSWORD,
  database: process.env.DB_DATABASE,
  options: { encrypt: true }
};

app.get('/products', async (req, res) => {
  try {
    const pool = await sql.connect(config);
    const result = await pool.request().query('SELECT * FROM Products');
    res.json(result.recordset);
  } catch (err) { res.status(500).send(err.message); }
});

app.post('/products', async (req, res) => {
  const { Name, Price } = req.body;
  try {
    const pool = await sql.connect(config);
    await pool.request()
      .input('Name', sql.NVarChar, Name)
      .input('Price', sql.Money, Price)
      .query('INSERT INTO Products (Name, Price) VALUES (@Name, @Price)');
    res.status(201).json({ Name, Price });
  } catch (err) { res.status(500).send(err.message); }
});

app.listen(3000, () => console.log('API listening on port 3000'));

4. Deploy to Azure App Service

  1. Push the code to a GitHub repo.
  2. Create an Azure App Service (Linux for Node, Windows for .NET).
  3. Configure the app settings with the same connection values.
  4. Enable Continuous Deployment from GitHub.

After deployment, your API will be reachable at https://<your-app>.azurewebsites.net.

Next Steps