LINQ og databaser
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.
- Vi lager et nytt prosjekt av typen Windows Form application
- 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.
- 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.
- 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.
- 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.
- 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.
- 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());
}
}
}