Stored procedure i ASP.NET OBS! Om du vill jobba med att skapa en stored procedure i en SQL Serverdatabas ifrån VS2010 måste du ha fullversion, expressversionen tillåter dig ej att skapa triggers, stored procedures, mm. ADO.NET Data Providers Ett antal klasser som tillåter dig att koppla upp dig mot en databas, exekvera SQL-kommandon och erhålla data. • Connection o Etablerar en kontakt till en datakälla. • Command o Exekverar SQL-kommandon och stored procedures. • DataReader o Snabb read-only & forward only läsning. • DataAdapter o Kan fylla ett dataset med data och ändra data i databasen. Providers för olika typer av databaser • SQL Server provider o Optimerad för SQL Server version 7 eller senare • OLE DB provider o Tidigare versioner av SQL Server eller datakällor som har en OLE DB provider - lite sämre prestanda • Oracle provider o Optimerad för Oracle 8i eller senare • ODBC provider o Alla datakällor som har ODBC - sämre prestanda. ADO.NET Namespace • System.Data o behållare för data som datasets, tables, rows, columns... • System.Data.Common o Mestadels abstrakta klasser som som andra namespace ärver ifrån, tex DbConnection, DbCommand, etc. • System.Data.Client o Klasser för uppkoppling to a Microsoft SQL Server, tex SqlCommand, SqlConnection, SqlDataReader & SqlDataAdapter. • System.Data.SqlTypes o Datatyper i SQL Server (kan användas istället för .NETs) Exempel på två connectionstrings Utdrag ur web.config: <configuration> <connectionStrings> <!-- user instance databas (finns ej i SQL Server utan bara i express) --> <add name="hemma" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient" /> <!-- Anslutning mot en SQL Server databas (den ni använder på högskolans server) --> <add name="cletus_jeha" connectionString="Data Source=ideweb.hh.se;User ID=jeha;Password=dittpasswd" providerName="System.Data.SqlClient" /> </connectionStrings> </configuration> I Visual Studio kan du också lägga din mdf-fil i App_Data. Du kan dubbelklicka på databasfilen för att modda... Exportera databasen till SQL-kod I server explorer kan du exportera din databas genom att generera SQL-kod, högerklicka på din databas och välj "Publish to provider...". Du kan då spara din databas som en sql-fil med data och allt. Vill du sedan skapa en kopia på ideweb.hh.se kan du bara öppna den i SQL Server Management Studio och exekvera den. Tips: Vill du föra över filer ifrån en tabell till en annan fungerar SQL-koden: INSERT INTO temp (kid,fnamn,enamn) SELECT kid,fnamn,enamn FROM student; Command • CommandType.Text o Skrivna SQL-frågor exekveras • CommandType.StoredProcedure o Stored procedure exekveras • CommandType.TableDirect (undvik) o Returnerar alla rader i en tabell. Men sämre prestanda pga bakåtkompabilitet. // För vanlig SQL-fråga: SqlCommand cmd = new SqlCommand(); cmd.Connection = con; cmd.CommandType = CommandType.Text; cmd.CommandType.Text = "SELECT * FROM student"; // Alternativt kan ovan skrivas såhär eftersom CommandType.Text är default: SqlCommand cmd = new SqlCommand("SELECT * FROM student",con); // För stored procedure kan det se ut såhär: SqlCommand cmd = new SqlCommand("sp_GrabbaStudenter",con); cmd.CommandType = CommandType.StoredProcedure; Metoder för command • ExecuteNonQuery() o exekverar alla frågor utom SELECT som t ex insert, detete och update. De returnerar bara det antal rader som påverkats. • ExecuteScalar() o exekverar en en fråga som endast returnerar första rad/kolumn-rutan, t ex aggregatfunktioner som COUNT() eller SUM() • ExecuteReader() o exekverar SELECT-frågor som returnerar en postsamling (read-only, forward only) Fördelar med stored procedure • Enklare att underhålla o du behöver ej göra om något i applikationerna o standardiserar logik för dataaccess på ett ställe, i databasen, vilka kan återanvändas för samtliga applikationer • Ger en säkrare databasanvändning o begränsa åtkomst av underliggande tabeller och låt alla köra stored procedures istället • Kan förbättra prestanda o om flera kommandon körs i en sp blir prestandan bättre, speciellt om databasservern är på en annan server. o är kompilerade och därför snabbare Transaktioner • En transaktion är en samling frågor som exekveras som en helhet eller inte alls. • Följer dessa steg: 1. 2. 3. 4. 5. 6. 7. Skapa connection Öppna connection Skapa instans av transaktion Starta transaktion Exekvera SQL-uttryck Fullfölj (commit) eller rulla tillbaka (rollback) Stäng connection • Du kan skapa transaktioner både i .NET och i stored procedures. Vilka egenskaper har en transaktion? • Atomic • Alla steg i transactionen lyckas eller misslyckas som helhet • Consistent • Underliggande databas tas ifrån ett konsistent läge till ett annant. Inga halvgjorda uppdateringar sker… • Isolated • Varje transaktion är oberoende av andra transaktioner som körs mot samma data vid samma tillfälle. • Durable • Garanterar att de ändringar som gjorts skrivs till disk. (Klarar även att skriva detta pga loggfiler hela tiden lagras om det efter commit skulle bli strömavbrott eller så…) Vilka egenskaper har en transaktion? • Här ser ni ett exempel på en databas I SQL-server: • Säg att vi vill lista alla anställda för ett företag: (se exempel 5) • Säg att vi vill flytta en anställd från ett företag till ett annat företag… (se exempel 6 a och b) • Var ligger skillnaden i dessa två frågor?