Databas – Simple.data

Inledning

Vi ska nu ta steget från ren SQL till att använda ett ramverk istället. Valet föll på Simple.Data eftersom det är just enkelt. Enkelt är kanske fel ord, avskalat passar kanske bättre.

Vi skall använda Simple.Data till att göra om samma exempel som i artikeln Databas - Verktyg & data fast med Simple.Data. Syftet med denna artikel är inte att lära ut databasteknik utan att ge exempel på användande av databaser i C#.

Introduktion till Simple.Data

Simple.Data finns att lägga till via NuGet så själva installationen i projektet är mycket enkel. Simple.Data fungerar med ett flertal databashanterare vilket gör att koden du skriver blir inte beroende av underliggande databashanterare. Detta är en viktig anledning till att använda ett ramverk för databaser.

En annan sak är skydd mot s.k. "SQL injections". SQL injections är en typ av angrepp mot ett system där man försöker få systemet att köra valfri SQL-kod. Lyckas man med detta så kan man få ut användarnamn och lösenord från systemet. Detta händer faktiskt rätt ofta. Med ett ramverk så minimerar du i alla fall riskerna med detta. Du är betydligt mer sårbar om du genererar din SQL själv i programmet.

Via den statiska klassen Database så kan du öppna en databasuppkoppling i Simple.Data. Det som följer sedan kan ses som lite kryptiskt. Uppkopplingen di får inklusive allt resultat är alla av typen dynamic. De är alltså inte bestämda till någon typ utan du kan skriva nästan hur som helst utan att få kompileringsfel. Felen kommer istället vid exekvering om det finns några.

Det Simple.Data gör är att dynamiskt tolka det du skrivit och översätter det till SQL. Låter det konstigt? Kika på videon nedan så ser du hur det hela går till.

Databas - Simple.Data 1

using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Simple.Data;

namespace DatabasTest
{
    class Program
    {
        static void Main(string[] args)
        {
            string connectionString = @"Data Source=.\SQLEXPRESS;Integrated Security=SSPI;Database=AdventureWorks2012";
            var db = Database.OpenConnection(connectionString);

            var persons = db.Person.Person.FindAllByFirstName("Ken")
                .Select(db.Person.Person.FirstName, 
                        db.Person.Person.LastName,
                        db.Person.Address.City)
                        .Join(db.Person.BusinessEntityAddress)
                        .On(db.Person.BusinessEntityAddress.BusinessEntityID == db.Person.Person.BusinessEntityID)
                        .Join(db.Person.Address)
                        .On(db.Person.BusinessEntityAddress.AddressID == db.Person.Address.AddressID);

            foreach (var person in persons)
            {
                Console.WriteLine(person.FirstName + " " + person.LastName + " in " + person.City);
            }
        }
    }
}

Enklare än tidigare exempel? Vi tycker så! Vi passade även på att göra mer avancerade saker i detta exempel.

När man pratar om tabeller som "hör ihop" så använder man ordet "relationer". I exemplet ovan råkar det vara som så att en Person kan vara registrerad på FLERA adresser samt att en adress kan höra till FLERA personer. Det är en typisk "många till många"-relation. Tabellen "Person.BusinessEntityAddress" löser relationen.

En betydligt vanligare relation är "en till många"-relationen. Där behövs ingen extra tabell för att lösa relationen. Nu kommer vi in på en hel del databasteknik. Syftet med denna artikel är inte att lära ut databasteknik utan att ge exempel på användande av databaser i C#. Det finns betydligt mer att lära om du som läsare vill bygga applikationer med större databaser. Förhoppningsvis blir du inspirerad!

Lägga till data

I exemplet ovan såg vi prov på Select, FindAllBy, Join, On. För fler funktioner eller olika sätt att sammanfoga data (join) eller välja ut data så hänvisar vi till dokumentationen av Simple.Data.

Nu är det dags för ett exempel där vi först skapa en egen databasstruktur och sedan skriver ett program som sparar lite data. Med Simple.Data går det snabbt!

Databas - Simple.Data 2

using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Simple.Data;

namespace DatabasTest
{
    class Program
    {
        static void Main(string[] args)
        {
            string connectionString = @"Data Source=.\SQLEXPRESS;Integrated Security=SSPI;Database=_Film";
            var db = Database.OpenConnection(connectionString);

            db.Film.Insert(Name: "The Godfather", Rating: 9);
            db.Film.Insert(Name: "The Godfather II", Rating: 8);
            db.Film.Insert(Name: "The Godfather III", Rating: 9);

            var films = db.Films.All();

            foreach (var film in films)
            {
                Console.WriteLine(film.Name);
            }
        }
    }
}

Avslutning

Hoppas du tyckte att det var "simple"!

Hela tanken med Simple.Data är att det skall vara minimalistiskt så att du kan använda det snabbt.

Kommande artiklar inom området databaser kommer att fokusera på Entity Framework (EF). Förutom att EF har en större spridning och att Microsoft rekommenderar EF till i princip alla applikationer så är EF också mer strukturerat. Du har t.ex. inte några dynamic som i Simple.Data. Mer om detta senare.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *

Scroll to top