Condividi tramite


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:

Per attivare l'aggiornamento, l'inserimento e l'eliminazione dei dati

  1. In una pagina Web ASP.NET, aggiungere un controllo LinqDataSource.

  2. 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.

  3. Impostare TableName sul nome della classe di entità che rappresenta la tabella di database associata.

  4. Impostare le proprietà EnableUpdate, EnableDelete e EnableInsert del controllo LinqDataSource su true.

  5. Aggiungere un controllo con associazione a dati, ad esempio un controllo DetailsView e impostare la proprietà DataSourceID sull'ID del controllo LinqDataSource.

  6. Impostare la proprietà DataKeyNames del controllo dati sul nome della colonna o delle colonne della tabella che contengono la chiave primaria.

  7. 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

  1. Creare un gestore eventi per l'evento Inserting, Updating o Deleting del controllo LinqDataSource.

  2. 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

    Inserting

    NewObject

    LinqDataSourceInsertEventArgs

    Updating

    NewObject

    OriginalObject

    LinqDataSourceUpdateEventArgs

    Deleting

    OriginalObject

    LinqDataSourceDeleteEventArgs

    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

Riferimenti

Parameter