11.01.2014 Views

Stored procedure i ASP.NET

Stored procedure i ASP.NET

Stored procedure i ASP.NET

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!