Procedura: aggiornare, inserire ed eliminare dati con il controllo LinqDataSource
Aggiornamento: novembre 2007
Con il controllo LinqDataSource è possibile creare pagine Web che consentono agli utenti di aggiornare, inserire ed eliminare dati. Non è necessario specificare comandi SQL perché il controllo LinqDataSource utilizza comandi creati dinamicamente per quelle operazioni. Per consentire agli utenti di modificare i dati, è possibile abilitare le operazioni di aggiornamento, inserimento o eliminazione nel controllo LinqDataSource. È quindi possibile connettere il controllo a un controllo con associazione a dati che consente agli utenti di aggiornare dati, ad esempio il controllo DetailsView o GridView. Per personalizzare i valori da aggiornare, è possibile aggiungere parametri o creare un gestore eventi e modificare i valori dinamicamente.
In questo argomento viene descritto come utilizzare il controllo LinqDataSource per attivare automaticamente le operazioni di aggiornamento, inserimento ed eliminazione. Inoltre, viene descritto come personalizzare i valori aggiornati. Infine, viene spiegato come creare un gestore eventi per impostare a livello di codice una proprietà prima dell'inserimento o dell'aggiornamento di un record di database.
I passaggi per l'attivazione automatica delle operazioni di aggiornamento, inserimento ed eliminazione sono pressoché simili tra loro. In questo argomento vengono illustrate le procedure per attivare tutte e tre le funzioni, sebbene non sia necessario abilitarle tutte. È possibile abilitare solo le funzioni necessarie.
Se non si conosce sufficientemente il controllo LinqDataSource, vedere Cenni preliminari sul controllo server Web LinqDataSource e Procedura dettagliata: recupero, aggiornamento, inserimento ed eliminazione di dati con i controlli LinqDataSource e DetailsView.
Attivazione automatica delle operazioni di aggiornamento, inserimento ed eliminazione dei dati
Per consentire al controllo LinqDataSource di gestire automaticamente gli aggiornamenti dei dati, sono necessarie le impostazioni seguenti:
È necessario che l'oggetto specificato nella proprietà ContextTypeName derivi dalla classe DataContext.
È necessario che le proprietà Select e GroupBy non siano impostate.
È necessario che una o più proprietà EnableUpdate, EnableDelete o EnableInsert siano impostate su true.
Per attivare l'aggiornamento, l'inserimento e l'eliminazione dei dati
In una pagina Web ASP.NET, aggiungere un controllo LinqDataSource.
Impostare la proprietà ContextTypeName sul nome di un oggetto che derivi dalla classe DataContext.
Quando si utilizza Progettazione relazionale oggetti in Visual Studio 2008 per creare una classe che rappresenta una tabella di database SQL, la classe generata deriva automaticamente da DataContext.
Impostare TableName sul nome della classe di entità che rappresenta la tabella di database associata.
Impostare le proprietà EnableUpdate, EnableDelete e EnableInsert del controllo LinqDataSource su true.
Aggiungere un controllo con associazione a dati, ad esempio un controllo DetailsView e impostare la proprietà DataSourceID sull'ID del controllo LinqDataSource.
Impostare la proprietà DataKeyNames del controllo dati sul nome della colonna o delle colonne della tabella che contengono la chiave primaria.
Nel controllo con associazione a dati, specificare un modo affinché l'utente passi alla modalità di aggiornamento, eliminazione o modifica.
Ad esempio, è possibile aggiungere i pulsanti al controllo con associazione a dati o consentire al controllo di creare automaticamente i pulsanti.
Nell'esempio seguente è illustrato il markup dichiarativo per la parte di una pagina Web ASP.NET contenente i controlli LinqDataSource e DetailsView. I controlli sono configurati per consentire all'utente di visualizzare, aggiornare, inserire ed eliminare dati in una tabella denominata Products.
<asp:LinqDataSource ContextTypeName="ExampleDataContext" TableName="Products" EnableUpdate="true" EnableInsert="true" EnableDelete="true" ID="LinqDataSource1" > </asp:LinqDataSource> <asp:DetailsView DataSourceID="LinqDataSource1" DataKeyNames="ProductID" AutoGenerateEditButton="true" AutoGenerateDeleteButton="true" AutoGenerateInsertButton="true" AllowPaging="true" ID="DetailsView1" > </asp:DetailsView>
Aggiunta di parametri per aggiornare, inserire o eliminare dati
Per impostazione predefinita, non è necessario aggiungere parametri per aggiornare, inserire o eliminare dati. Un controllo con associazione a dati passa i valori al controllo LinqDataSource che utilizza tali valori per impostare la proprietà corrispondente. LINQ a SQL crea i comandi per modificare l'origine dati. Per ulteriori informazioni, vedere LINQ to SQL.
È possibile specificare i parametri per le operazioni di aggiornamento, inserimento o eliminazione. I parametri si specificano per fornire un valore predefinito o per definire se i valori vuoti di stringa vengono convertiti in null. Non è necessario specificare un parametro per ogni valore che si sta aggiornando o inserendo, ma solo per i valori da personalizzare. Qualsiasi valore che non è definito da un parametro viene gestito automaticamente dal controllo LinqDataSource.
Il controllo LinqDataSource contiene i seguenti insiemi per la gestione dei parametri: UpdateParameters, InsertParameters e DeleteParameters.
Per aggiungere parametri per l'aggiornamento, l'inserimento e l'eliminazione dei dati
Aggiungere la definizione di un parametro per ogni valore che si desidera modificare.
Nell'esempio riportato di seguito viene illustrato come aggiungere un parametro per una proprietà denominata Category. Il parametro viene aggiunto agli insiemi UpdateParameters e InsertParameters.
<asp:LinqDataSource ContextTypeName="ExampleDataContext" TableName="Products" EnableUpdate="true" EnableInsert="true" EnableDelete="true" ID="LinqDataSource1" > <UpdateParameters> <asp:Parameter Name="Category" DefaultValue="Miscellaneous" /> </UpdateParameters> <InsertParameters> <asp:Parameter Name="Category" DefaultValue="Miscellaneous" /> </InsertParameters> </asp:LinqDataSource>
Quando l'utente non specifica un valore per la proprietà Category, il valore predefinito viene salvato nel database.
Impostazione dei valori a livello di codice
Per impostare le proprietà a livello di codice prima dell'esecuzione di un'operazione sui dati, è possibile creare i gestori eventi per gli eventi Inserting, Updating e Deleting del controllo LinqDataSource. Le proprietà non impostate nel gestore eventi vengono impostate automaticamente dal controllo LinqDataSource.
Per impostare i valori a livello di codice
Creare un gestore eventi per l'evento Inserting, Updating o Deleting del controllo LinqDataSource.
Nel gestore eventi, aggiungere il codice che imposti a livello di codice il valore che si desidera modificare.
I dati da aggiornare, inserire o eliminare sono nelle seguenti proprietà:
Evento
Proprietà
Classe
Tutte queste proprietà restituiscono un oggetto di tipo Object. È possibile eseguire il cast degli oggetti restituiti da queste proprietà al tipo della classe di entità che rappresenta i dati. Dopo avere eseguito il cast, è possibile impostare le proprietà per quel tipo.
Nell'esempio seguente è illustrato un gestore eventi per l'evento Inserting che imposta una colonna DateModified sulla data e sull'ora correnti. Viene eseguito il cast dell'oggetto nella proprietà NewObject al tipo Product.
Protected Sub LinqDataSource_Inserting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.LinqDataSourceInsertEventArgs) Dim product As Product product = CType(e.NewObject, Product) product.DateModified = DateTime.Now End Sub
protected void LinqDataSource_Inserting(object sender, LinqDataSourceInsertEventArgs e) { Product product = (Product)e.NewObject; product.DateModified = DateTime.Now; }
Nell'esempio riportato di seguito è illustrato il markup dichiarativo per un controllo LinqDataSource che esegue l'associazione del metodo LinqDataSource_Inserting all'evento Inserting:
<asp:LinqDataSource ContextTypeName="ExampleDataContext" TableName="Products" OnInserting="LinqDataSource_Inserting" EnableUpdate="true" EnableInsert="true" EnableDelete="true" ID="LinqDataSource1" > </asp:LinqDataSource>
Compilazione del codice
Per aggiornare, inserire o eliminare i dati utilizzando il controllo LinqDataSource, è necessario creare una classe di entità che rappresenta una tabella di database. È possibile creare una classe di entità utilizzando Progettazione relazionale oggetti in Visual Studio 2008.
Sicurezza
Questo esempio contiene una casella di testo che accetta l'input dell'utente e rappresenta quindi un potenziale rischio per la sicurezza. Per impostazione predefinita, le pagine Web ASP.NET verificano che l'input dell'utente non includa script o elementi HTML. Per ulteriori informazioni, vedere Cenni preliminari sugli attacchi tramite script.
Per informazioni sull'archiviazione di una stringa di connessione, vedere Procedura: proteggere le stringhe di connessione durante l'utilizzo dei controlli origine dati.
Per informazioni su come non visualizzare le informazioni riservate nei messaggi di errore, vedere Procedura: visualizzare messaggi di errore protetti.
Vedere anche
Concetti
Cenni preliminari sul controllo server Web LinqDataSource