ADO.NET Murach Kapitel 17-20



Relevanta dokument
Stored procedure i ASP.NET

Stored procedure i ASP.NET

Arbeta med databas. Översikt. Lektion 1: Arbeta med Entity Data Models. Arbeta med Entity Data Models. LINQ (Language Integrated Query).

public DataSet GenerateDataSet(SqlCommand dbcommand, String tablename, out String errormsg) { errormsg = "";

Mål med lektionen! Repetera och befästa kunskaperna.

Lab 6: ASP.NET 2.0 Providermodellen

INNEHÅLL. Konfigurering av SQL Server. Egenskaper Kommunikationsprotokoll

DDL Kommandon CREATE/DROP Database CREATE /ALTER/DROP Table ALTER/ADD/DROP Column CREATE /ALTER/DROP Index

INTRODUKTION TILL JDBC

Innehåll MySQL Intro. Allmänt om Lagrade Procedurer Enkel utformning Skapa en lagrad procedur Använda parameter som indata

Arrayer. results

Kort om klasser och objekt En introduktion till GUI-programmering i Java

Databasens består av: Tabell Kolumner fält Rader poster (varje post är unik)

Introduktion till Entity Framework och LINQ. Källa och läs mer

SQLs delar. Idag. Att utplåna en databas. Skapa en databas

WCMS-15, Webbutvecklare CMS

Klientprogrammering mot databaser

Att skriva till och läsa från terminalfönstret

Föreläsning 4. Klass. Klassdeklaration. Klasser Och Objekt

1. SQL DML (Data Manipulation Language) 2. Lägga till data. 4. Uppdatera data 5. Aktivera default value 6. Hantera datum 7.

Objektsamlingar i Java

Objektorienterad Programmering (OOP) Murach s: kap 12-16

Lektion 5 HTML, CSS, PHP och MySQL

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

Grundläggande programmering med C# 7,5 högskolepoäng

Language Integrated Query, LINQ, och databaser

Konvertering från sträng. Winstrand Development

FactoryCast HMI. Premium & Quantum PLC. MySQL Server och FactoryCast HMI databastjänst

Övningar i SQL. SQLAccess.doc Ove Lundgren

Lektion 7. Datateknik A, Java I, 5 poäng

Idag. Hur skapar vi och underhåller en databas? DD1370 (Föreläsning 4) Databasteknik och informationssystem 7,5 hp Hösten / 20

Mål med lektionen! Veta kursmålen. Ha kännedom om några av de grundläggande begreppen.

SQL. Structured Query Language. Frågespråk för att används för. Kommandon. data åtkomst data manipulation

Java, klasser, objekt (Skansholm: Kapitel 2)

public och private Obs: private inte skyddar mot access från andra objekt i samma klass.

Innehåll. dynamisk bindning. och programmering CRC) u Arv, polymorfi och

Du skall naturligtvis visa körexempel med output där det behövs i din rapport!

I STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else

Labb LIVE. Exempelkod från föreläsningen. Plushögskolan Frågeutveckling inom MSSQL - SU14

Objektorienterad Programmering DAT043

Programmering B med Visual C

Innehåll. MySQL Grundkurs

GATEWAY TJÄNSTEBESKRIVNING. Webbservice. WSDL-fil. Skicka meddelanden. SMS och FastnätsSMS

Transaktioner. 1. Transaktioner 2. Samtidighet ( concurrency ) och lås. 3. Deadlock. Kap. 17. Informatik B: Databashantering med SQL Server

Inledande programmering med C# (1DV402) Tärningarna ska kastas

FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY , kl

Exempel. Arrayer. Lösningen. Ett problem. Arrayer och hakparanteser. Arrayer

ID1004 Laboration 4, November 2012

Lär känna MS SQL 2008 / Övning. Observera. Tips. Förberedelse

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

Innehåll. Föreläsning 3. javax.naming.context. javax.sql.datasource. Vad är JDBC? Java Naming and Directory Interface(JNDI) Viktigaste metoder:

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Typkonvertering. Java versus C

Arrayer (vektorer) Murach s: kap Elektronikcentrum i Svängsta AB

VAD GÖR DU / VEM ÄR DU?

Samlingar, Gränssitt och Programkonstruktion! Förelasning 11!! TDA540 Objektorienterad Programmering!

Structured query language (SQL)

Polymorfi. Objektorienterad och komponentbaserad programmering

Föreläsning 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc

DIAGNOSTISKT PROV. Tid. Hjälpmedel. Antaganden. Rättning. Övrigt. Diagnostiskt Prov. Klockan Inga

Webbtjänster med API er

Starta MySQL Query Browser

Introduktion Schenker-BTL AB, Stab IT Beskrivning över informationsintegreringmed Schenker, metodbeskrivning version 1.

Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här:

Labb LABB 1. Databassagan och en rundtur i databasers märkliga värld. Plushögskolan Frågeutveckling inom MSSQL - SU14

Databasutveckling Introduktion till SQL och TSQL

Databasutveckling Microsoft T-SQL - Fortsättning. Funktioner GROUP BY HAVING Skapa databaser Skapa tabeller Lite om transaktioshantering

Sample exam questions. Database exam TIG058

Databasföreläsning. Del 2 lagrade procedurer, vyer och transaktioner

Metoder (funktioner) Murach s: kap Winstrand Development

Tentamen ID1004 Objektorienterad programmering May 29, 2012

Denna laboration skapades för elever vid Roslagens Högskola men kan användas av vem som helst. Namnen på servrarna måste i så fall ändras.

Objektorienterad programmering

Objektorienterad programmering i Java

Classes och Interfaces, Objects och References, Initialization

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier

Vad är en databas? Exempel på databaser: Databas = Organiserad samling och lagring av information.

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

Tentamen Nätverksprogrammering Lösningsförslag

Objektorienterad programmering D2

Genomgång av tentamen. Databasteknik ITHS 4/3 2016

Laboration 1 - Grunderna för OOP i Java

TUTORIAL: KLASSER & OBJEKT

Generiska konstruktioner. Kursbokens kapitel 13

Gissa det hemliga talet

Laboration A Objektsamlingar

Structured Query Language (SQL)

Modeller, Objekt och Klasser

Tabeller och kolumner SQL. Lägga till en ny post. Lägga till en ny post

Del2 Klasser, medlemmar och arv Ämnesområden denna föreläsning:

LÖSNINGSFÖRSLAG TENTAMEN

Innehåll Programability Del 2

Exceptions (undantag) Murach s: kap 7

2203$( Föreläsning ii - Mer om Java bla this och konstruktorer. Exempel: lampa

Introduktion till Winbas. excel till Winbas

Design och underhåll av databaser

JAVASCRIPT. Beteende

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Transkript:

Databaser och C# ADO.NET Murach Kapitel 17-20 2013-01-30 1 Winstrand Development

Databas ADO.NET Är en del av.net ramverket och tillhandahåller delar för att kommunicera med olika datakällor. Dessa kan vara databaser, textfiler, Excelark eller XML-filer. Vi kommer att inrikta oss på att arbeta mot databaser. 2

Uppgiftslämnare (Data Providers) Vi vet att ADO.NET låter oss interagera med olika typer av datakällor och olika typer av databaser. Det finns dock inte en enda uppsättning klasser som tillåter dig att uppnå detta universellt. Eftersom olika datakällor använder olika protokoll, behöver vi ett sätt att kommunicera med rätt datakälla genom rätt protokoll. Vissa äldre datakällor använder ODBC-protokollet, många nyare datakällor använder OLEDB protokollet och det kommer fler datakällor varje dag som tillåter att du kommunicerar direkt med dem genom.nets ADO.NET klassbibliotek. 3

Data Providers forts. ADO.NET ger en relativt vanligt sätt att samverka med datakällor, men finns i olika uppsättningar av bibliotek för varje sätt du kan prata med en datakälla. Dessa bibliotek kallas Data Providers. 4

Tabellen listar några välkända uppgiftslämnare, API prefixet de använder, och vilken typ av datakälla de tillåter dig att interagera med. Data källa API Prefix Beskrivning ODBC Data Provider OleDb Data Provider Oracle Data Provider SQL Data Provider Borland Data Provider Odbc OleDb Oracle Sql Bdp Data Sources with an ODBC interface. Normally older data bases. Data Sources that expose an OleDb interface, i.e. Access or Excel. For Oracle Databases. For interacting with Microsoft SQL Server. Generic access to many databases such as Interbase, SQL Server, IBM DB2, and Oracle. 5

ADO.NET Objekt SQLConnection object För att interagera med en databas måste du ha en anslutning till den. Anslutningen hjälper till att identifiera databasservern, databasnamn, användarnamn, lösenord och andra parametrar som krävs för att ansluta till databasen. Ett anslutningsobjekt används av kommandoobjektet så att de vet vilken databas som ska användas. 6

ADO.NET Objekt SqlCommand object Processen att interagera med en databas innebär att du måste ange de åtgärder du vill ska inträffa. Detta görs med ett kommando-objekt. Du använder ett kommando-objekt för att skicka SQL-satser till databasen. Ett kommando-objekt använder ett anslutningsobjekt för att veta vilken databas som ska kommuniceras med. Du kan använda ett kommando-objekt ensamt för att utföra ett kommando direkt, eller tilldela en referens till en SqlDataAdapter. 7

ADO.NET Objekt SqlDataReader objekt Många operationer kräver att du bara får en ström av data för läsning. Tillåter dig att få resultatet av en SELECT-sats från ett kommando-objekt. Av prestandaskäl är de data som returneras från objektet är endast en ström av data. Detta innebär att du bara kan ta data från strömmen på ett sekventiellt sätt Detta är bra för hastighet, men om du behöver manipulera data, då är det bättre att arbeta med DataSet-objekt. 8

ADO.NET Objekt DataSet-objekt Är en in-memory representation av data. Innehåller flera DataTable-objekt som innehåller kolumner och rader, precis som vanliga databastabeller. Du kan även definiera relationer mellan tabeller för att skapa överordnade och underordnade relationer. Är särskilt utformat för att hantera data i minnet och för att stödja frånkopplade operationer på data när ett sådant scenario krävs. Är ett objekt som används av alla uppgiftslämnarna, varför den inte har ett DataProvider specifik prefix. 9

ADO.NET Objekt SqlDataAdapter Objekt Ibland när man arbetar med främst skrivskyddad data och sällan behöver göra ändringar i den underliggande datakällan eller när vissa situationer kräver cachning av data i minnet för att minimera antalet databasanrop för uppgifter som inte ändras. Då är det lämpligt att använda sig av SqlDataAdapter-objektet som gör det enkelt för dig att utföra dessa saker genom att hjälpa till att hantera data i en frånkopplad läge. 10

ADO.NET Objekt SqlDataAdapter Objekt Populerar ett DataSet-objekt när man läser data och skriver in alltsammans när man har gjort ändringar Innehåller en referens till anslutnings-objektet och öppnar och stänger anslutningen automatiskt när man läser från eller skriver till databasen. Dessutom innehåller kommandoobjekt referenser för SELECT, INSERT, UPDATE och DELETE operationer på datan. Det definieras en adapter för varje tabell i ett DataSet och det kommer att sköta all kommunikation med databasen för dig. Allt du behöver göra är att tala om för adaptern när man laddar från eller skriver till databasen. 11

Skapa SQL koppling Skapa ett SQL kommando SqlConnection conn = new SqlConnection(@"server=.\SQLExpress; + database=spo12;integrated Security=SSPI;"); SqlDataReader rdr = null; try { conn.open(); SqlCommand cmd = new SqlCommand("SELECT * FROM Customers", conn); rdr = cmd.executereader(); while (rdr.read()) { txtusers.text = txtusers.text + rdr[1] + " " + rdr[2] + " [" + rdr[0] + "]\n"; } } finaly { if(rdr!= null) { rdr.close(); } } if (conn!= null) { conn.close(); } 12

Skapa ett SqlCommand objekt I likhet med andra C #-objekt, när man instansierar ett SqlCommand-objekt med en ny instans deklaration, enligt följande: SqlCommand cmd = new SqlCommand("SELECT firstname FROM Users", conn); Detta är ett typiskt sätt att instansiera ett SqlCommand-objekt. Det tar en strängparameter som innehåller det kommando du vill köra och en hänvisning till ett SQLConnection objekt. 13

Ställa en fråga När du använder SQL-kommandot SELECT får du ett data-set. För att åstadkomma detta med SqlCommand-objektet använder du ExecuteReader-metoden som returnerar ett SqlDataReaderobjekt. Exemplet nedan visar hur du använder SqlCommand objektet för att få ett SqlDataReader objekt: SqlCommand cmd = new SqlCommand ("SELECT firstname FROM Users", conn); SqlDataReader rdr = cmd.executereader(); I exemplet ovan, instansierar vi SqlCommand-objektet, skickar med kommandosträngen och anslutningsobjektet till konstruktorn. Då kan vi få ett SqlDataReader-objekt genom att anropa ExecuteReader -metoden i cmd. 14

Infoga data Om du vill infoga data i en databas, använder man ExecuteNonQuery-metoden från SqlCommandobjektet. Följande kod visar hur du infogar data i en databas tabell: // Förbereda kommandosträng string insertstring = @" INSERT INTO Users (firstname, lastname) VALUES ( Arne, Andersson s )"; SqlCommand cmd = new SqlCommand(insertString, conn); cmd.executenonquery(); Denna SqlCommand instansiering är bara lite annorlunda från vad du har sett förut, men det är i princip samma. 15

Istället för en sträng som första parameter i SqlCommand konstruktorn använder vi en variabel, insertstring. Lägg märke till de två apostroferna('') i insertstring texten för ordet Andersson s. Det är så man escapar apostrofer för att få strängen att fylla kolumnen ordentligt. En annan iakttagelse att göra om insert-kommandot är att vi uttryckligen anger kolumnerna firstname och lastname. Tabellen Users har ett primärnyckel-fält med namnet id. Vi utelämnade detta ur listan eftersom SQL Server kommer att lägga till detta fält själv. Försöker lägga till ett värde till ett primärnyckel-fält, t.ex. id, kommer det att genereras ett undantag. För att utföra detta kommando kallar vi helt enkelt ExecuteNonQuery-metoden från SqlCommand instansen cmd. 16

Uppdatera data ExecuteNonQuery-metoden används också för att uppdatera data. Följande kod visar hur du uppdaterar data: // Förbereda kommandosträng string updatestring = @" UPDATE Users SET firstname= Bamse WHERE lastname= Andersson s "; SqlCommand cmd = new SqlCommand(updateString); cmd.connection = conn; cmd.executenonquery(); Återigen satte vi SQL-kommandot till en sträng variabel, men den här gången använder vi en annan SqlCommand konstruktor som bara tar strängen. I steg 2, tilldelar vi SQLConnection objektet, conn till Connection egenskapen för cmd. 17

Uppdatera data (forts) Detta skulle ha skett på samma sätt om konstruktorn används med två parametrar. Det visar att man kan ändra anslutningsobjektet när som helst. ExecuteNonQuery-metoden utför uppdaterings-kommandot. 18

Ta bort data Du kan också radera data med hjälp av ExecuteNonQuery-metoden. Följande exempel visar hur du tar bort en post från en databas med ExecuteNonQuery: // Förbereda kommandosträng string deletestring = @" DELETE FROM Users WHERE lastname= Andersson s "; SqlCommand cmd = new SqlCommand(); cmd.commandtext = deletestring; cmd.connection = conn; cmd.executenonquery(); I exemplet används SqlCommand konstruktorn utan parametrar. Istället sätter man explicit CommandText och Connection egenskaperna i SqlCommand-objektet cmd. 19

Ta bort data (forts) Vi kunde också använt något av de två föregående sätten i anropet av SqlCommand konstruktorn, med samma resultat. Detta visar att du kan ändra både kommandosträngen och anslutningen när som helst. Med ExecuteNonQuery-metodanropet skickar man kommando till databasen. 20

SqlDataReader Objekt Att skapa en instans av SqlDataReader är lite annorlunda än på vilket sätt du initiera andra ADO.NET objekt. Du måste kalla på ExecuteReader från ett kommando-objekt, så här: SqlDataReader rdr = cmd.executereader(); ExecuteReader är en metod i SqlCommand objektet cmd, det returnerar en SqlDataReader instans. Man behöver skapa ett SqlDataReader objekt för att kunna ta hand om resultatet från de frågor man ställer med SqlCommand-objektet, som nämnts tidigare. 21

SqlDataReader Använda inläst data Såsom förklarats tidigare, återgår SqlDataReader data via en sekventiell ström. För att läsa dessa data måste du hämta data från en tabell rad-för-rad När en rad har läst, är den tidigare raden inte längre tillgänglig. För att läsa den raden igen, skulle du behöva skapa en ny instans av SqlDataReader och läsa igenom dataströmmen igen. Den typiska metoden för läsning från dataströmmen returneras av SqlDataReader är att loopa igenom varje rad med en while-slinga. Följande kod visar hur du gör detta: 22

while (rdr.read()) { // get the results of each column string contact = (string)rdr["contactname"]; string company = (string)rdr["companyname"]; string city = (string)rdr["city"]; } // print out the results Console.Write("{0,-25}", contact); Console.Write("{0,-20}", city); Console.Write("{0,-25}", company); Console.WriteLine(); 23

Lägg märke till metodanropet rdr.read() i villkoret för while. Returvärdet från Read är bool och true så länge det finns fler poster att läsa. När den sista posten i dataströmmen är läst, så returneras false. Tidigare, extraherade vi den första kolumnen från raden med hjälp av SqlDataReader indexeraren, dvs rdr[0]. Du kan extrahera varje kolumn i raden med en numerisk indexerare som denna. I exemplet ovan används en strängindexerare, där strängen är kolumnnamnet från SQL-fråga (tabell kolumnnamn om du använde en asterisk, *). String indexerare gör det mycket mer lättläst, vilket gör koden lättare att underhålla. Oavsett vilken typ av indexerarparameter, kommer en SqlDataReader indexerare returnera ett typobjekt. Detta är anledningen till typkonverteringen i exemplet ovan. När värdena utvinns, kan du göra vad du vill med dem, till exempel skriva ut dem. 24

Skapa SQL koppling Skapa ett SQL kommando SqlConnection conn = new SqlConnection(@"server=.\SQLExpress; + database=spo12;integrated Security=SSPI;"); SqlDataReader rdr = null; try { conn.open(); SqlCommand cmd = new SqlCommand("SELECT * FROM Customers", conn); rdr = cmd.executereader(); while (rdr.read()) { txtusers.text = txtusers.text + rdr[1] + " " + rdr[2] + " [" + rdr[0] + "]\n"; } } finaly { if(rdr!= null) { rdr.close(); } } if (conn!= null) { conn.close(); } 25

Länkar till bra sidor på nätet http://www.w3schools.com/ado/default.asp 26