Stored procedure i ASP.NET
Stored procedure i ASP.NET
Stored procedure i ASP.NET
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
<strong>Stored</strong> <strong>procedure</strong> i <strong>ASP</strong>.<strong>NET</strong><br />
OBS! Om du vill jobba med att skapa en stored<br />
<strong>procedure</strong> i en SQL Serverdatabas ifrån VS2010 måste<br />
du ha fullversion, expressversionen tillåter dig ej att<br />
skapa triggers, stored <strong>procedure</strong>s, mm.
ADO.<strong>NET</strong> Data Providers<br />
Ett antal klasser som tillåter dig att koppla upp dig mot en databas,<br />
exekvera SQL-kommandon och erhålla data.<br />
• Connection<br />
o Etablerar en kontakt till en datakälla.<br />
• Command<br />
o Exekverar SQL-kommandon och stored <strong>procedure</strong>s.<br />
• DataReader<br />
o Snabb read-only & forward only läsning.<br />
• DataAdapter<br />
o Kan fylla ett dataset med data och ändra data i databasen.
Providers för olika typer av databaser<br />
• SQL Server provider<br />
o Optimerad för SQL Server version 7 eller senare<br />
• OLE DB provider<br />
o Tidigare versioner av SQL Server eller datakällor som har<br />
en OLE DB provider - lite sämre prestanda<br />
• Oracle provider<br />
o Optimerad för Oracle 8i eller senare<br />
• ODBC provider<br />
o Alla datakällor som har ODBC - sämre prestanda.
ADO.<strong>NET</strong> Namespace<br />
• System.Data<br />
o behållare för data som datasets, tables, rows, columns...<br />
• System.Data.Common<br />
o Mestadels abstrakta klasser som som andra namespace<br />
ärver ifrån, tex DbConnection, DbCommand, etc.<br />
• System.Data.Client<br />
o Klasser för uppkoppling to a Microsoft SQL Server, tex<br />
SqlCommand, SqlConnection, SqlDataReader &<br />
SqlDataAdapter.<br />
• System.Data.SqlTypes<br />
o Datatyper i SQL Server (kan användas istället för .<strong>NET</strong>s)
Exempel på två connectionstrings<br />
Utdrag ur web.config:<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
I Visual Studio kan du också lägga din mdf-fil i App_Data.<br />
Du kan dubbelklicka på databasfilen för att modda...
Exportera databasen till SQL-kod<br />
I server explorer kan du exportera din databas genom att generera<br />
SQL-kod, högerklicka på din databas och välj<br />
"Publish to provider...".<br />
Du kan då spara din databas som en sql-fil med data och allt.<br />
Vill du sedan skapa en kopia på<br />
ideweb.hh.se kan du bara öppna<br />
den i SQL Server Management Studio<br />
och exekvera den.<br />
Tips: Vill du föra över filer ifrån en tabell till<br />
en annan fungerar SQL-koden:<br />
INSERT INTO temp (kid,fnamn,enamn)<br />
SELECT kid,fnamn,enamn FROM student;
Command<br />
• CommandType.Text<br />
o Skrivna SQL-frågor exekveras<br />
• CommandType.<strong>Stored</strong>Procedure<br />
o <strong>Stored</strong> <strong>procedure</strong> exekveras<br />
• CommandType.TableDirect (undvik)<br />
o Returnerar alla rader i en tabell. Men sämre prestanda pga bakåtkompabilitet.<br />
// För vanlig SQL-fråga:<br />
SqlCommand cmd = new SqlCommand();<br />
cmd.Connection = con;<br />
cmd.CommandType = CommandType.Text;<br />
cmd.CommandType.Text = "SELECT * FROM student";<br />
// Alternativt kan ovan skrivas såhär eftersom CommandType.Text är default:<br />
SqlCommand cmd = new SqlCommand("SELECT * FROM student",con);<br />
// För stored <strong>procedure</strong> kan det se ut såhär:<br />
SqlCommand cmd = new SqlCommand("sp_GrabbaStudenter",con);<br />
cmd.CommandType = CommandType.<strong>Stored</strong>Procedure;
Metoder för command<br />
• ExecuteNonQuery()<br />
o exekverar alla frågor utom SELECT som t ex insert,<br />
detete och update. De returnerar bara det antal rader som<br />
påverkats.<br />
• ExecuteScalar()<br />
o exekverar en en fråga som endast returnerar första<br />
rad/kolumn-rutan, t ex aggregatfunktioner som COUNT()<br />
eller SUM()<br />
• ExecuteReader()<br />
o exekverar SELECT-frågor som returnerar en postsamling<br />
(read-only, forward only)
Fördelar med stored <strong>procedure</strong><br />
• Enklare att underhålla<br />
o du behöver ej göra om något i applikationerna<br />
o standardiserar logik för dataaccess på ett ställe, i<br />
databasen, vilka kan återanvändas för samtliga<br />
applikationer<br />
• Ger en säkrare databasanvändning<br />
o begränsa åtkomst av underliggande tabeller och låt alla<br />
köra stored <strong>procedure</strong>s istället<br />
• Kan förbättra prestanda<br />
o om flera kommandon körs i en sp blir prestandan bättre,<br />
speciellt om databasservern är på en annan server.<br />
o är kompilerade och därför snabbare