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
| Funktion | LocalDB | SQL Server Express | SQL Server |
|---|---|---|---|
| Användning | Utveckling | Små produktioner | Företag |
| Installation | Mycket lätt | Lätt | Komplex |
| Resurser | Minimala | Begränsade | Obegränsade |
| Fjärranslutning | Nej | Ja | Ja |
| Pris | Gratis | Gratis | Licenskostnad |
2. Installation av verktyg och Docker
2.1 Installera SQL Server Express (LocalDB)
Alternativ 1: Via Visual Studio Installer
- Öppna Visual Studio Installer
- Modify → Individual components
- Bocka i “SQL Server Express 2019 LocalDB”
- Klicka Install
Alternativ 2: Separat installation
- Gå till https://learn.microsoft.com/en-us/sql/database-engine/configure-windows/sql-server-express-localdb
- Ladda ner “SqlLocalDB.msi”
- Installera med standardinställningar
Verifiera installation:
sqllocaldb info
Du bör se MSSQLLocalDB i listan.
2.2 Installera SSMS (SQL Server Management Studio)
- Ladda ner från https://aka.ms/ssmsfullsetup
- Installera med standardinställningar
- 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
- Öppna SSMS
- Klicka “Connect”
- Server name:
(localdb)\MSSQLLocalDB - Authentication: Windows Authentication
- Klicka “Connect”
Skapa en databas
Via SSMS:
- Högerklicka på “Databases”
- Välj “New Database…”
- Ange namn:
MyApp - 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örAUTO_INCREMENTNVARCHARistället förVARCHAR(stöd för Unicode)GOefter 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
- Högerklicka på databasen
MyApp - Tasks → Back Up…
- Välj “Full” backup
- Ange sökväg för
.bak-filen - Klicka “OK”
Backup via SQL
BACKUP DATABASE MyApp
TO DISK = 'C:\Backup\MyApp.bak'
WITH FORMAT;
GO
Återställning via SSMS
- Högerklicka på “Databases”
- Restore Database…
- Välj “Device” och bläddra till
.bak-filen - 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
| Vad | Hur |
|---|---|
| Installera | Visual Studio Installer eller SqlLocalDB.msi |
| Admin-verktyg | SSMS (SQL Server Management Studio) |
| Anslutning | (localdb)\MSSQLLocalDB |
| NuGet-paket | Microsoft.EntityFrameworkCore.SqlServer |
| Connection string | Server=(localdb)\MSSQLLocalDB;Database=MyApp;Integrated Security=true; |
| CRUD | EF Core eller ADO.NET |
| Backup | .bak-fil via SSMS eller SQL |
9. Vanliga fel och lösningar
“A network-related or instance-specific error occurred”
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)!