Kapitel 3 – LocalDB och SQL Server

1. Vad är LocalDB?

LocalDB är en lättviktsversion av SQL Server som är designad för utvecklare. Den körs som en process när du behöver den, inte som en ständig tjänst.

Fördelar

✅ Enkel installation (ingår med Visual Studio) ✅ Ingen serverkonfiguration ✅ Samma syntax och features som SQL Server ✅ Bra för utveckling och test ✅ Lätt att uppgradera till full SQL Server senare

Nackdelar

❌ Inte för produktion ❌ Ingen fjärranslutning ❌ Begränsad prestanda jämfört med full SQL Server

LocalDB vs SQL Server Express vs SQL Server

FunktionLocalDBSQL Server ExpressSQL Server
AnvändningUtvecklingSmå produktionerFöretag
InstallationMycket lättLättKomplex
ResurserMinimalaBegränsadeObegränsade
FjärranslutningNejJaJa
PrisGratisGratisLicenskostnad

2. Installation av verktyg och Docker

2.1 Installera SQL Server Express (LocalDB)

Alternativ 1: Via Visual Studio Installer

  1. Öppna Visual Studio Installer
  2. Modify → Individual components
  3. Bocka i “SQL Server Express 2019 LocalDB”
  4. Klicka Install

Alternativ 2: Separat installation

  1. Gå till https://learn.microsoft.com/en-us/sql/database-engine/configure-windows/sql-server-express-localdb
  2. Ladda ner “SqlLocalDB.msi”
  3. Installera med standardinställningar

Verifiera installation:

sqllocaldb info

Du bör se MSSQLLocalDB i listan.

2.2 Installera SSMS (SQL Server Management Studio)

  1. Ladda ner från https://aka.ms/ssmsfullsetup
  2. Installera med standardinställningar
  3. Starta SSMS

2.3 (Valfritt) Docker-container för SQL Server

Se nästa kapitel (04) för full SQL Server i Docker.

För LocalDB behövs inte Docker – det är redan lokalt!


3. Kom igång med SSMS

Anslut till LocalDB

  1. Öppna SSMS
  2. Klicka “Connect”
  3. Server name: (localdb)\MSSQLLocalDB
  4. Authentication: Windows Authentication
  5. Klicka “Connect”

Skapa en databas

Via SSMS:

  1. Högerklicka på “Databases”
  2. Välj “New Database…”
  3. Ange namn: MyApp
  4. Klicka “OK”

Via SQL:

CREATE DATABASE MyApp;
GO

USE MyApp;
GO

Skapa en tabell

CREATE TABLE Customers (
    CustomerId INT IDENTITY(1,1) PRIMARY KEY,
    Name NVARCHAR(100) NOT NULL,
    Email NVARCHAR(100) NOT NULL UNIQUE,
    Phone NVARCHAR(20)
);
GO

-- Lägg till data
INSERT INTO Customers (Name, Email, Phone)
VALUES
    ('Anna Andersson', 'anna@example.com', '0701234567'),
    ('Erik Svensson', 'erik@example.com', '0702345678');
GO

-- Visa data
SELECT * FROM Customers;
GO

Notera skillnader från MySQL/SQLite:

  • INT IDENTITY(1,1) istället för AUTO_INCREMENT
  • NVARCHAR istället för VARCHAR (stöd för Unicode)
  • GO efter varje batch

4. Anslutning med C#

Installera NuGet-paket

dotnet add package Microsoft.Data.SqlClient

Basic connection (ADO.NET)

using Microsoft.Data.SqlClient;

string connectionString = @"Server=(localdb)\MSSQLLocalDB;Database=MyApp;Integrated Security=true;";

using (var connection = new SqlConnection(connectionString))
{
    connection.Open();

    var command = connection.CreateCommand();
    command.CommandText = "SELECT * FROM Customers";

    using (var reader = command.ExecuteReader())
    {
        while (reader.Read())
        {
            var id = reader.GetInt32(0);
            var name = reader.GetString(1);
            var email = reader.GetString(2);

            Console.WriteLine($"{id}: {name} ({email})");
        }
    }
}

Parametriserade queries

command.CommandText = "INSERT INTO Customers (Name, Email, Phone) VALUES (@name, @email, @phone)";
command.Parameters.AddWithValue("@name", "Lisa Larsson");
command.Parameters.AddWithValue("@email", "lisa@example.com");
command.Parameters.AddWithValue("@phone", "0701111111");
command.ExecuteNonQuery();

5. Entity Framework Core – paket och migreringar

Installera paket

dotnet add package Microsoft.EntityFrameworkCore.SqlServer
dotnet add package Microsoft.EntityFrameworkCore.Design
dotnet tool install --global dotnet-ef

Skapa modeller

public class Customer
{
    public int CustomerId { get; set; }
    public string Name { get; set; } = string.Empty;
    public string Email { get; set; } = string.Empty;
    public string? Phone { get; set; }
}

Skapa DbContext

using Microsoft.EntityFrameworkCore;

public class AppDbContext : DbContext
{
    public DbSet<Customer> Customers { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer(@"Server=(localdb)\MSSQLLocalDB;Database=MyApp;Integrated Security=true;");
    }
}

Skapa migrations

dotnet ef migrations add InitialCreate
dotnet ef database update

EF Core skapar Customers-tabellen automatiskt!


6. CRUD-exempel (SQL + C#)

CREATE (INSERT)

SQL:

INSERT INTO Customers (Name, Email, Phone)
VALUES ('Magnus Nilsson', 'magnus@example.com', '0703456789');

C# med EF Core:

using (var context = new AppDbContext())
{
    var customer = new Customer
    {
        Name = "Magnus Nilsson",
        Email = "magnus@example.com",
        Phone = "0703456789"
    };

    context.Customers.Add(customer);
    context.SaveChanges();
}

READ (SELECT)

SQL:

SELECT * FROM Customers
WHERE Email LIKE '%@example.com'
ORDER BY Name;

C# med EF Core:

using (var context = new AppDbContext())
{
    var customers = context.Customers
        .Where(c => c.Email.EndsWith("@example.com"))
        .OrderBy(c => c.Name)
        .ToList();

    foreach (var customer in customers)
    {
        Console.WriteLine($"{customer.Name} - {customer.Email}");
    }
}

UPDATE

SQL:

UPDATE Customers
SET Phone = '0709999999'
WHERE CustomerId = 1;

C# med EF Core:

using (var context = new AppDbContext())
{
    var customer = context.Customers.Find(1);
    if (customer != null)
    {
        customer.Phone = "0709999999";
        context.SaveChanges();
    }
}

DELETE

SQL:

DELETE FROM Customers WHERE CustomerId = 3;

C# med EF Core:

using (var context = new AppDbContext())
{
    var customer = context.Customers.Find(3);
    if (customer != null)
    {
        context.Customers.Remove(customer);
        context.SaveChanges();
    }
}

7. Backup och återställning (.bak)

Backup via SSMS

  1. Högerklicka på databasen MyApp
  2. Tasks → Back Up…
  3. Välj “Full” backup
  4. Ange sökväg för .bak-filen
  5. Klicka “OK”

Backup via SQL

BACKUP DATABASE MyApp
TO DISK = 'C:\Backup\MyApp.bak'
WITH FORMAT;
GO

Återställning via SSMS

  1. Högerklicka på “Databases”
  2. Restore Database…
  3. Välj “Device” och bläddra till .bak-filen
  4. Klicka “OK”

Återställning via SQL

USE master;
GO

RESTORE DATABASE MyApp
FROM DISK = 'C:\Backup\MyApp.bak'
WITH REPLACE;
GO

8. TL;DR – Snabböversikt

VadHur
InstalleraVisual Studio Installer eller SqlLocalDB.msi
Admin-verktygSSMS (SQL Server Management Studio)
Anslutning(localdb)\MSSQLLocalDB
NuGet-paketMicrosoft.EntityFrameworkCore.SqlServer
Connection stringServer=(localdb)\MSSQLLocalDB;Database=MyApp;Integrated Security=true;
CRUDEF Core eller ADO.NET
Backup.bak-fil via SSMS eller SQL

9. Vanliga fel och lösningar

Problem: LocalDB körs inte. Lösning: Starta LocalDB:

sqllocaldb start MSSQLLocalDB

“Cannot open database ‘MyApp’”

Problem: Databasen finns inte. Lösning: Skapa den via SSMS eller kör migrations.

“Login failed for user”

Problem: Fel authentication. Lösning: Använd Integrated Security=true; eller Trusted_Connection=true;

EF migrations skapar fel version

Problem: Connection string pekar på fel server. Lösning: Dubbelkolla connection string i DbContext.

LocalDB hittas inte

Problem: Inte installerad eller felaktig PATH. Lösning:

sqllocaldb info

Om kommandot inte hittas, installera LocalDB igen.


10. Sammanfattning

Du har nu lärt dig: ✅ Vad LocalDB är och när du ska använda det ✅ Installera LocalDB och SSMS ✅ Ansluta från C# med ADO.NET och EF Core ✅ CRUD-operationer ✅ Ta backup som .bak-fil

Nästa steg: Kapitel 4 – SQL Server i Docker (avancerat, för produktionsliknande miljöer)!


Upp

Upp


Licens: Apache 2.0 | © 2023 Marcus Medina, Campus Mölndal. Alla rättigheter förbehållna.
Du får använda och modifiera detta verk enligt villkoren i Apache License, Version 2.0. Du får inte använda detta verk för kommersiella ändamål utan tillstånd från upphovsmannen.