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()); } } }