Possiamo vedere ASP.NET Web Pages come una semplificazione del modello introdotto da MVC, pensato per scenari meno complessi, dove lo scripting può essere utilizzato perché le pagine che vogliamo costruire sono semplici.
In quest'ambito, si ha accesso comunque a tutto il .NET Framework e tutte le classi che ASP.NET mette a disposizione, ma sono state introdotte una serie di semplificazioni legate a scenari particolari: uno di questo è quello dell'accesso ai dati.
Grazie all'uso di SQL Server Compact, è possibile mettere un file all'interno della directory App_Data e accedervi con un motore in process, che non ha limiti nell'utilizzo, come avviene invece nel caso di Access.
Supponendo di avere un database di nome bakery.sdf, sarà sufficiente utilizzare questo file per estrarre i valori dalla relativa tabella products:
@{ var db = Database.Open("bakery"); var products = db.Query("SELECT * FROM PRODUCTS").ToList(); }
@Code Dim db = Database.Open("bakery") Dim products = db.Query("SELECT * FROM PRODUCTS").ToList() End Code
Ciò che avviene dietro le quinte è che la chiamata che effettua la query costruisce, al volo, un modello tipizzato, così che sia possibile accedere ai valori contenuti nelle colonne del database sfruttando un modello molto semplice, che userà una proprietà con lo stesso nome della colonna nella tabella. Questa caratteristica rende meno soggetto a problemi il nostro codice, perché è fortemente tipizzato e non ci costringe ad accedere ai vari campi utilizzando delle stringhe.
A questo punto, per esplorare la collection con i prodotti estratti dal database, ci basterà un semplice ciclo:
<ul> @foreach (var p in products) { <li> <h3>@p.Name</h3> @p.Description </li> } </ul>
<ul>@ForEach p in products @<li> @<h3>@p.Name</h3> @p.Description </li> Next </ul>
Tutte le classi coinvolte sono presenti nel namespace WebMatrix.Data.
Nel caso di una query che estragga un solo prodotto, si può utilizzare il metodo QuerySingle:
var product = db.QuerySingle("SELECT * FROM PRODUCTS WHERE ID = @0", productId);
Dim product = db.QuerySingle("SELECT * FROM PRODUCTS WHERE ID = @0", productId)
Analogamente, per le query di manipolazione dei dati (INSERT, UPDATE, DELETE) è disponibile il metodo Execute:
var query = "INSERT INTO Product (Name, Description, Price) VALUES (@0, @1, @2)"; db.Execute(query, name, description, price);
Dim query = "INSERT INTO Product (Name, Description, Price) VALUES (@0, @1, @2)" db.Execute(query, name, description, price)
Come si può notare, le query sono sicure ed immuni a SQL injection, perché fanno uso di parametri: è sufficiente specificare gli stessi dopo la virgola, seguendo la sintassi specifica in precedenza.
Infine, una precisazione: questo codice può funzionare anche con SQL Server (o, in generale, con un qualsiasi database che abbia un managed provider per ADO.NET). In questo caso, basta agire sull'apertura della connessione, specificandola in maniera corretta attraverso il metodo OpenConnectionString:
var connectionString = "Data Source=.\\SQLExpress;Initial Catalog=Bakery;Integrated Security=True"; var providerName = "System.Data.SqlClient"; var db = Database.OpenConnectionString(connectionString, providerName);
Dim connectionString = "Data Source=.\SQLExpress;Initial Catalog=Bakery;Integrated Security=True" Dim providerName = "System.Data.SqlClient" Dim db = Database.OpenConnectionString(connectionString, providerName)
Riferimenti utili
Il nostro speciale su ASP.NET Razorhttps://www.aspitalia.com/focuson/1253/Speciale-Razor-View-Engine-WebMatrix-ASP.NET-MVC.aspx
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Utilizzare le Cache API di JavaScript per salvare elementi nella cache del browser
Usare lo spread operator con i collection initializer in C#
Autenticarsi in modo sicuro su Azure tramite GitHub Actions
Evitare (o ridurre) il repo-jacking sulle GitHub Actions
Utilizzare domini personalizzati gestiti automaticamente con Azure Container Apps
Eseguire le GitHub Actions offline
Definire stili a livello di libreria in Angular
Sfruttare lo streaming di una chiamata Http da Blazor
Sfruttare al massimo i topic space di Event Grid MQTT
Registrare servizi multipli tramite chiavi in ASP.NET Core 8
Migrare una service connection a workload identity federation in Azure DevOps
Trasformare qualsiasi backend in un servizio GraphQL con Azure API Management
I più letti di oggi
- Riordinare le righe di una GridView di ASP.NET con jQuery
- Creazione di un alarm con suono personalizzato con Windows Phone 7.1
- Utilizzare la session affinity con Azure Container Apps
- Blue-green deployment con Azure Web App e DevOps
- Ed infine anche il calendario :)
- Configurare la diagnostica di Azure attraverso Visual Studio
- Recuperare la data di creazione di un tag tramite una pipeline YAML di Azure DevOps
- Microsoft Security Bulletin MS05-002
- .NET Core e dispositivi IoT
- Eseguire attività pianificate con Azure Container Jobs