SQL-datatyper — val och mapping till C#

Praktiska regler för val av datatyper och hur de mappas till C#.

Vanliga datatyper (SQLite / SQL Server / C#):

  • Integer: SQLite INTEGER → C# int/long; SQL Server INT/BIGINT.
  • Text: SQLite TEXT → C# string; SQL Server NVARCHAR.
  • Boolean: SQLite lagras ofta som INTEGER (0/1) → C# bool; SQL Server BIT.
  • DateTime: SQLite kan spara som TEXT (ISO 8601) → C# DateTime; SQL Server DATETIME2.
  • Decimal / Money: använd DECIMAL(precision, scale) i DB och decimal i C# för pengar (inte double/float).
  • Blob: binärdata → C# byte[] (bilder, filer).

Rekommendationer

  • Pengar: använd decimal i C# och DECIMAL(18,2) i DB eller lagra som heltal i cents (PriceInCents INTEGER).
  • Datum/tid: spara i ISO 8601 (yyyy-MM-dd HH:mm:ss) om du använder TEXT, eller DB-native datetime.
  • Textlängder: ange maxlängd för sökbar text (NVARCHAR(100)) för index-effektivitet.
  • NULL vs NOT NULL: välj NOT NULL för obligatoriska fält och använd nullable typer i C# för optionella fält (e.g. DateTime?).

Exempel:

CREATE TABLE Products (
    ProductId INTEGER PRIMARY KEY AUTOINCREMENT,
    Name TEXT NOT NULL,
    PriceInCents INTEGER NOT NULL,  -- 1999 = 19.99
    CreatedAt TEXT NOT NULL DEFAULT (datetime('now')),
    IsActive INTEGER DEFAULT 1
);

Mapping i C#:

public class Product {
    public int ProductId { get; set; }
    public string Name { get; set; } = "";
    public decimal Price => PriceInCents / 100m;
    public int PriceInCents { get; set; }
    public DateTime CreatedAt { get; set; }
    public bool IsActive { get; set; }
}

Vanliga fallgropar

  • Använd inte float/double för pengar.
  • Glöm inte timezone‑hantering om applikationen är distribuerad.
  • SQLite typflexibilitet betyder att constraints och validering i applikationen är viktiga.

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.