SQL Server en C#

  1. Inleiding
  2. SQL Server
  3. Entity Framework
  4. Slot
  5. Voorbeeldprogramma

Inleiding

SQL Server is een relationeel databasebeheersysteem van Microsoft. De eerste versie van SQL Server werd omstreeks 1989 uitgebracht als doorontwikkeling van Sybase. Andere bekende relationele databasebeheersystemen zijn Oracle en mySQL.

Veel applicaties beginnen met een Ms Access database, maar migreren naar een ander database product zodra de database is gegroeid tot iets met miljoenen records en de databasegrootte de 2 GB gaat overschrijden. Men gaat in veel gevallen over op SQL Server omdat die bedoeld is voor grote gegevensverzamelingen en omdat die beter kan omgaan met meerdere gebruikers die gelijktijdig gebruik maken van de database. Verder geeft SQL Server betere prestaties bij uitgebreide opvraag queries en het biedt t.o.v. Ms Access meer beveiligingsmogelijkheden.

Er zijn talloze andere volwaardige alternatieven te vinden voor SQL Server zodat je bij een upgrade niet per se hoeft te kiezen voor SQL Server. In deze post laten we zien hoe we met C# een SQL Server database benaderen.

up | down

SQL Server

We creëeren een tabel in een SQL Server database en we geven het de naam tblEigenaar. De tabel heeft de volgende inhoud:

In het voorbeeldprogramma gebruiken we de System.Data.SQLClient library en (o.a.) een klasse sqlDataReader om de inhoud van de SQL Server tabel op te vragen. We hoeven echter niet alles te zien en we selecteren derhalve alleen de autobezitters die woonachtig zijn in  regio “Noord”.  We gebruiken verder een parameterized SQL statement waarmee SQL injection wordt tegengegaan:

using System;
using System.Data.SqlClient;

Console.WriteLine("*** Begin programma ***\r\n");
string connectieString 
= @"Initial catalog=VOORBEELD;
    integrated security=True;
    Data Source=xxx\SQLEXPRESS;
    MultipleActiveResultSets=True";

string SQLString = "SELECT * 
                    FROM tblEigenaar 
                    Where Regio=@Regio 
                    ORDER BY omschrijving";

using (SqlConnection sqlConnection 
       = new SqlConnection(connectieString))
{
  Console.WriteLine("Met SqlDataReader");
  sqlConnection.Open();

  SqlCommand sqlCommand = 
  new SqlCommand(SQLString, sqlConnection);

  sqlCommand.Parameters
    .AddWithValue("@Regio", "Noord");

  SqlDataReader sqlDataReader 
  = sqlCommand.ExecuteReader();

  while (sqlDataReader.Read())
  {
    Console.Write("{0}. ", 
    sqlDataReader["ID"].ToString());
    Console.WriteLine("{0}", 
    sqlDataReader["omschrijving"]);
  }
}

Resultaat:

Met SqlDataReader
4. Jan's auto
7. Piet's auto
1. Sandra's auto

up | down

Entity Framework – LINQ

Entity Framework (EF) is een open source object relational mapping (ORM) framework. Bij EF wordt uitgegaan van objecten en klassen waarbij de nadruk ligt op die objecten en klassen en niet op de onderliggende database. Vanuit de database genereren we een diagram:

Waarbij klassen uit de database worden gegenereerd:

We kunnen daarbij LINQ gebruiken waarbij de syntax hetzelfde is als de LINQ in deze post. Dat is ook het uitgangspunt van LINQ. Alles komt uit een gegevensbron en wat voor soort gegevensbron? Dat is LINQ om het even.

using System;
using System.Linq;

using (var ctx = new VOORBEELDEntities())
{
  Console.WriteLine("\r\nMet LINQ");
  var eigenaren = ctx.tblEigenaar
    .OrderBy(x => x.omschrijving)
    .Where(x => x.regio == "Noord")
    .ToList();

  foreach(var eigenaar in eigenaren)
  {
   Console.Write(
   "{0} ", eigenaar.Id.ToString());
   Console.WriteLine(
   "{0}", eigenaar.omschrijving);
  }
}

Resultaat:

Met LINQ
4 Jan's auto
7 Piet's auto
1 Sandra's auto

up | down

Slot

In deze post heb ik laten zien hoe je gegevens ophaalt uit een database. We hebben de SQL Server relationele databasebeheersysteem gebruikt en een aantal records uit een tabel geselecteerd waarbij we de geselecteerde records gesorteerd hebben laten doen verschijnen.

Het ophalen van gegevens uit de database kan op meerdere manieren en zo hebben we de System.Data.SqlClient library gebruikt en LINQ met Entity Framework. Entity Framework vormt een soort abstractielaag waarbij je de nadruk legt op objecten en niet op de onderliggende database.

Hopelijk ben je met deze posting weer wat wijzer geworden en ik hoop je weer terug te zien in één van mijn volgende blog posts. Wil je weten wat ik nog meer over C# heb geschreven? Hit the C# button…

up | down


Voorbeeldprogramma

using System;
using System.Data.SqlClient;
using System.Linq;

namespace SQLSERVER
{
 class Program
 {
  static void Main(string[] args)
  {
   Console.WriteLine("*** Begin programma ***\r\n");
   string connectieString 
   = @"Initial catalog=VOORBEELD;
       integrated security=True;
       Data Source=xxx\SQLEXPRESS;
       MultipleActiveResultSets=True";

   string SQLString = 
      "SELECT * 
       FROM tblEigenaar 
       Where Regio=@Regio 
       ORDER BY omschrijving";
   try
   {
    using (SqlConnection 
           sqlConnection 
           = new SqlConnection(connectieString))
    {
     Console.WriteLine("Met SqlDataReader");
     sqlConnection.Open();
     SqlCommand sqlCommand = 
     new SqlCommand(SQLString, sqlConnection);

     sqlCommand.Parameters
       .AddWithValue("@Regio", "Noord");

     SqlDataReader sqlDataReader 
     = sqlCommand.ExecuteReader();

     while (sqlDataReader.Read())
     {
      Console.Write(
      "{0}. ", sqlDataReader["ID"].ToString());
      Console.WriteLine(
      "{0}", sqlDataReader["omschrijving"]);
     }
    }

    using (var ctx = new VOORBEELDEntities())
    {
     Console.WriteLine("\r\nMet LINQ");
     var eigenaren = ctx.tblEigenaar
      .OrderBy(x => x.omschrijving)
      .Where(x => x.regio == "Noord")
      .ToList();

     foreach(var eigenaar in eigenaren)
     {
      Console.Write(
      "{0} ", eigenaar.Id.ToString());
      Console.WriteLine(
      "{0}", eigenaar.omschrijving);
     }
    }
   }
   catch (Exception ex)
   {
    Console.WriteLine(ex.Message);
   }
   finally
   {
    Console.WriteLine(
    "\r\n*** Einde Programma ***");
    Console.ReadLine();
   }
  }
 }
}

up

Laat een reactie achter

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *