LINQ
Database
Børre Stenseth
Moduler>LINQ>Database

LINQ og databaser

Hva
screen
LINQ og databaser

Vi skal bruke LINQ til å koble oss mot databaser. Det vil si at vi bruker LINQ som alternativ til SQL.

Eksempel 1

Vi forsøker å etablere en kopling mot vindatabasen som beskrevet i modulen Noen datasett. Det er ganske mye som kan automatiseres dersom vi gjør de rektige valgene i designfasen. Her er forsøksvis en detaljert prosedyre for å sette opp en applikasjon. Dette forutsetter at donau.hiof.no er koplet opp via VPN. Hvis du vil bruke en alternativ base, f.eks. lokalt, så er gangen i dette den samme.

  1. Vi lager et nytt prosjekt av typen Windows Form application
  2. Vi velger Tools -> Connect to Database, og kopler oss opp med server name:donau.hiof.no, SQL Server Authentication med bruker bs2 og passord bs2. Database bs.
  3. Det neste vi må gjøre er å sette opp en kopling fra LINQ til SQL (!). Vi gjør dette ved å høyreklikke på prosjektet vårt i solution explorer, og velege Add --> New Item og velge LINQ to SQL Classes. Vi kaller denne Wines.dbml.
  4. Vi får da expandert et vindu som kaller seg Object Relational Designer. (Eventuelt dobbeltkliker vi på Wines.dbml). Vi lokaliserer nå wines-tabellen vår i Server explorer, og drar denne inn på Object Relational Designer og sparer (og lukker) dette vinduet.
  5. Det neste er å sette opp en datakilde, Data Source. Vi velger Data --> Add New Data Source, Velger Object, og expanderer den første linja til vi finner wine og velger denne.
  6. Vi åpner Form1 i designmodus og finner wine som vi laget ovenfor som Data Source. Så drar vi denne wine-noden ut på Form1. Da skal det skje en masse ting: Vi får opp en DatagridView, en navigator og en Binding Source. Disse skal være koplet til hverandre og vi er klare til å bygge prosjektet. Det som gjensår er å fylle strukturen vår med data.
  7. Det siste vi gjør er å skrive kode for å laste data ved oppstart. I dette tilfellet viner fra Chile med terningkast 6, se nedenfor.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace linq6
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            comboBoxCountry.SelectedItem=comboBoxCountry.Items[0];
        }
        private void Loaddata(String country)
        {
            try
            {
                // WinesDatContext is a class in cs-code for Wines.dbml
                // Wines.cs
                WinesDataContext database = new WinesDataContext();
                wineBindingSource.DataSource =
                    from wine in database.newwines
                    where wine.country.CompareTo(country) == 0
                    where wine.dice == 6
                    select wine;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
 
        private void buttonLoad_Click(object sender, EventArgs e)
        {
            Loaddata(comboBoxCountry.SelectedItem.ToString());
        }
    }
}
Referanser
  • Eksempel 1:
    https://svn.hiof.no/svn/psource/Csharpspikes/linq6
Vedlikehold

B.Stenseth, januar 2011

(Velkommen) Moduler>LINQ>Database (Lambda)