Condividi tramite


Uso di stored procedure esistenti per i TableAdapter del set di dati tipizzato (C#)

di Scott Mitchell

Scarica il PDF

Nell'esercitazione precedente si è appreso come usare la Creazione guidata TableAdapter per generare nuove stored procedure. In questa esercitazione viene illustrato come la stessa Procedura guidata TableAdapter può essere usata con stored procedure esistenti. Si apprenderà anche come aggiungere manualmente nuove stored procedure al database.

Introduzione

Nell'esercitazione precedente è stato illustrato come è possibile configurare i TableAdapter di Typed DataSet per usare stored procedure per accedere ai dati anziché istruzioni SQL ad hoc. In particolare, è stato esaminato come creare automaticamente queste stored procedure con la procedura guidata TableAdapter. Quando si esegue la conversione di un'applicazione legacy in ASP.NET 2.0 o quando si crea un sito Web ASP.NET 2.0 intorno a un modello di dati esistente, è probabile che il database contenga già le stored procedure necessarie. In alternativa, è consigliabile creare le stored procedure in base alla mano o tramite alcuni strumenti diversi dalla procedura guidata TableAdapter che genera automaticamente le stored procedure.

In questa esercitazione verrà illustrato come configurare TableAdapter per usare stored procedure esistenti. Poiché il database Northwind include solo un piccolo set di stored procedure predefinite, verranno esaminati anche i passaggi necessari per aggiungere manualmente nuove stored procedure al database tramite l'ambiente di Visual Studio. Iniziamo!

Nota

Nell'esercitazione Modifiche al database di wrapping in un'esercitazione sulle transazioni sono stati aggiunti metodi all'oggetto TableAdapter per supportare le transazioni (BeginTransaction, CommitTransactione così via). In alternativa, le transazioni possono essere gestite interamente all'interno di una stored procedure, che non richiede modifiche al codice livello di accesso ai dati. In questa esercitazione verranno illustrati i comandi T-SQL usati per eseguire istruzioni di stored procedure nell'ambito di una transazione.

Passaggio 1: Aggiunta di stored procedure al database Northwind

Visual Studio semplifica l'aggiunta di nuove stored procedure a un database. Aggiungere una nuova stored procedure al database Northwind che restituisce tutte le colonne della Products tabella per quelle con un valore specifico CategoryID . Nella finestra Esplora server espandere il database Northwind in modo che vengano visualizzate le relative cartelle, diagrammi di database, tabelle, viste e così via. Come illustrato nell'esercitazione precedente, la cartella Stored Procedure contiene le stored procedure esistenti del database. Per aggiungere una nuova stored procedure, fare semplicemente clic con il pulsante destro del mouse sulla cartella Stored Procedure e scegliere l'opzione Aggiungi nuova stored procedure dal menu di scelta rapida.

Fare clic con il pulsante destro del mouse sulla cartella stored procedure e aggiungere una nuova stored procedure

Figura 1: Right-Click cartella stored procedure e Aggiungere una nuova stored procedure (fare clic per visualizzare un'immagine full-size)

Come illustrato nella figura 1, selezionare l'opzione Aggiungi nuova stored procedure apre una finestra di script in Visual Studio con la struttura dello script SQL necessario per creare la stored procedure. Il processo è quello di compilare questo script ed eseguirlo, a questo punto verrà aggiunta la stored procedure al database.

Immettere lo script seguente:

CREATE PROCEDURE dbo.Products_SelectByCategoryID 
(
    @CategoryID int
)
AS
SELECT ProductID, ProductName, SupplierID, CategoryID, 
       QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder, 
       ReorderLevel, Discontinued
FROM Products
WHERE CategoryID = @CategoryID

Questo script, quando eseguito, aggiungerà una nuova stored procedure al database Northwind denominato Products_SelectByCategoryID. Questa stored procedure accetta un singolo parametro di input (@CategoryID, di tipo int) e restituisce tutti i campi per tali prodotti con un valore corrispondente CategoryID .

Per eseguire questo CREATE PROCEDURE script e aggiungere la stored procedure al database, fare clic sull'icona Salva nella barra degli strumenti o premere CTRL+S. Dopo aver eseguito questa operazione, la cartella Stored Procedure viene aggiornata, che mostra la stored procedure appena creata. Inoltre, lo script nella finestra cambierà la sottigliezza da CREATE PROCEDURE dbo.Products_SelectProductByCategoryID a ALTER PROCEDUREdbo.Products_SelectProductByCategoryID. CREATE PROCEDURE aggiunge una nuova stored procedure al database, mentre ALTER PROCEDURE ne aggiorna una esistente. Dall'inizio dello script è stato modificato in ALTER PROCEDURE, modificando i parametri di input delle stored procedure o le istruzioni SQL e facendo clic sull'icona Salva verrà aggiornata la stored procedure con queste modifiche.

La figura 2 mostra Visual Studio dopo il salvataggio della Products_SelectByCategoryID stored procedure.

La stored procedure Products_SelectByCategoryID è stata aggiunta al database

Figura 2: La stored procedure Products_SelectByCategoryID è stata aggiunta al database (fare clic per visualizzare l'immagine full-size)

Passaggio 2: Configurazione di TableAdapter per l'uso di una stored procedure esistente

Ora che la stored procedure è stata aggiunta al database, è possibile configurare il Products_SelectByCategoryID livello di accesso ai dati per usare questa stored procedure quando viene richiamato uno dei relativi metodi. In particolare, verrà aggiunto un GetProductsByCategoryID(categoryID) metodo all'oggetto ProductsTableAdapterNorthwindWithSprocs in Typed DataSet che chiama la Products_SelectByCategoryID stored procedure appena creata.

Iniziare aprendo DataSet NorthwindWithSprocs . Fare clic con il pulsante destro del ProductsTableAdapter mouse su e scegliere Aggiungi query per avviare la configurazione guidata query TableAdapter. Nell'esercitazione precedente è stato scelto di creare una nuova stored procedure per l'utente. Per questa esercitazione, tuttavia, si vuole collegare il nuovo metodo TableAdapter alla stored procedure esistente Products_SelectByCategoryID . Scegliere quindi l'opzione Usa stored procedure esistente dal primo passaggio della procedura guidata e quindi fare clic su Avanti.

Scegliere l'opzione Usa stored procedure esistente

Figura 3: Scegliere l'opzione Usa stored procedure esistente (Fare clic per visualizzare l'immagine a dimensioni complete)

La schermata seguente fornisce un elenco a discesa popolato con le stored procedure del database. Selezionando una stored procedure vengono elencati i parametri di input a sinistra e i campi dati restituiti (se presenti) a destra. Scegliere la Products_SelectByCategoryID stored procedure dall'elenco e fare clic su Avanti.

Selezionare la stored procedure Products_SelectByCategoryID

Figura 4: Selezionare la stored procedure (fare clic per visualizzare l'immagineProducts_SelectByCategoryID full-size)

Nella schermata successiva viene chiesto quale tipo di dati viene restituito dalla stored procedure e la risposta qui determina il tipo restituito dal metodo TableAdapter. Ad esempio, se si indica che i dati tabulari vengono restituiti, il metodo restituirà un'istanza ProductsDataTable popolata con i record restituiti dalla stored procedure. Al contrario, se si indica che questa stored procedure restituisce un singolo valore, TableAdapter restituirà un object valore assegnato nella prima colonna del primo record restituito dalla stored procedure.

Poiché la Products_SelectByCategoryID stored procedure restituisce tutti i prodotti appartenenti a una categoria specifica, scegliere la prima risposta - dati tabulari - e fare clic su Avanti.

Indica che la stored procedure restituisce dati tabulari

Figura 5: Indicare che la stored procedure restituisce dati tabulari (fare clic per visualizzare l'immagine a dimensioni complete)

Tutto ciò che rimane consiste nell'indicare i modelli di metodo da usare seguiti dai nomi per questi metodi. Lasciare selezionata sia l'opzione Fill a DataTable che Restituisce una tabella dati, ma rinominare i metodi in FillByCategoryID e GetProductsByCategoryID. Fare quindi clic su Avanti per esaminare un riepilogo delle attività eseguite dalla procedura guidata. Se tutto sembra corretto, fare clic su Fine.

Assegnare un nome ai metodi FillByCategoryID e GetProductsByCategoryID

Figura 6: Assegnare un nome ai metodi FillByCategoryID e GetProductsByCategoryID (fare clic per visualizzare l'immagine full-size)

Nota

I metodi TableAdapter appena creati FillByCategoryID e GetProductsByCategoryID, prevedono un parametro di input di tipo int. Questo valore del parametro di input viene passato alla stored procedure tramite il @CategoryID relativo parametro. Se si modificano i Products_SelectByCategory parametri della stored procedure, è necessario aggiornare anche i parametri per questi metodi TableAdapter. Come illustrato nell'esercitazione precedente, questa operazione può essere eseguita in uno dei due modi seguenti: aggiungendo o rimuovendo manualmente i parametri dall'insieme di parametri o eseguendo nuovamente la procedura guidata TableAdapter.

Passaggio 3: Aggiunta di unGetProductsByCategoryID(categoryID)metodo al BLL

Al termine del GetProductsByCategoryID metodo DAL, il passaggio successivo consiste nel fornire l'accesso a questo metodo nel livello della logica di business. Aprire il file di ProductsBLLWithSprocs classe e aggiungere il metodo seguente:

[System.ComponentModel.DataObjectMethodAttribute
    (System.ComponentModel.DataObjectMethodType.Select, false)]
public NorthwindWithSprocs.ProductsDataTable GetProductByCategoryID(int categoryID)
{
    return Adapter.GetProductsByCategoryID(categoryID);
}

Questo metodo BLL restituisce semplicemente l'oggetto ProductsDataTableProductsTableAdapter restituito dal metodo s GetProductsByCategoryID . L'attributo DataObjectMethodAttribute fornisce metadati usati dalla procedura guidata Configura origine dati di ObjectDataSource. In particolare, questo metodo verrà visualizzato nell'elenco a discesa SELECT della scheda SELECT.

Passaggio 4: Visualizzazione di prodotti in base alla categoria

Per testare la stored procedure appena aggiunta Products_SelectByCategoryID e i metodi DAL e BLL corrispondenti, è possibile creare una pagina di ASP.NET contenente un elenco a discesa e un controllo GridView. L'Elenco a discesa elenca tutte le categorie nel database mentre GridView visualizzerà i prodotti appartenenti alla categoria selezionata.

Nota

Sono state create interfacce master/dettagli usando DropDownLists nelle esercitazioni precedenti. Per un'analisi più approfondita sull'implementazione di un report master/dettaglio, vedere l'esercitazione Filtro master/dettaglio con un elenco a discesa .

Aprire la ExistingSprocs.aspx pagina nella AdvancedDAL cartella e trascinare un elenco a discesa dalla casella degli strumenti nella Designer. Impostare la proprietà DropDownList su ID e la relativa AutoPostBack proprietà Categories su true. Successivamente, dal relativo smart tag, associare DropDownList a un nuovo OggettoDataSource denominato CategoriesDataSource. Configurare ObjectDataSource in modo che recupera i dati dal CategoriesBLL metodo della GetCategories classe. Impostare gli elenchi a discesa nelle schede UPDATE, INSERT e DELETE su (Nessuno).

Recuperare dati dal metodo GetCategories della classe CategoriesBLL

Figura 7: Recuperare i dati dal CategoriesBLL metodo della GetCategories classe (fare clic per visualizzare l'immagine full-size)

Impostare la Drop-Down Elenchi nelle schede UPDATE, INSERT e DELETE su (Nessuno)

Figura 8: Impostare la Drop-Down Elenchi nelle schede UPDATE, INSERT e DELETE su (Nessuna) (fare clic per visualizzare l'immagine full-size)

Dopo aver completato la procedura guidata ObjectDataSource, configurare DropDownList per visualizzare il CategoryName campo dati e usare il CategoryID campo come per Value ogni ListItemoggetto .

A questo punto, il markup dichiarativo DropDownList e ObjectDataSource deve essere simile al seguente:

<asp:DropDownList ID="Categories" runat="server" AutoPostBack="True" 
    DataSourceID="CategoriesDataSource" DataTextField="CategoryName" 
    DataValueField="CategoryID">
</asp:DropDownList>
<asp:ObjectDataSource ID="CategoriesDataSource" runat="server"
    OldValuesParameterFormatString="original_{0}" 
    SelectMethod="GetCategories" TypeName="CategoriesBLL">
</asp:ObjectDataSource>

Trascinare quindi gridView nella Designer, posizionandola sotto l'elenco a discesa. Impostare GridView su IDProductsByCategory e, dal relativo smart tag, associarlo a un nuovo OggettoDataSource denominato ProductsByCategoryDataSource. ProductsByCategoryDataSource Configurare ObjectDataSource per usare la ProductsBLLWithSprocs classe, avendola recuperata usando il GetProductsByCategoryID(categoryID) metodo . Poiché gridView verrà usato solo per visualizzare i dati, impostare gli elenchi a discesa nelle schede UPDATE, INSERT e DELETE su (Nessuno) e fare clic su Avanti.

Configurare ObjectDataSource per usare la classe ProductsBLLWithSprocs

Figura 9: Configurare ObjectDataSource per usare la classe (fare clic per visualizzare l'immagineProductsBLLWithSprocs full-size)

Recuperare dati dal metodo GetProductsByCategoryID(categoryID)

Figura 10: Recuperare dati dal metodo (fare clic per visualizzare l'immagineGetProductsByCategoryID(categoryID) full-size)

Il metodo scelto nella scheda SELECT prevede un parametro, quindi il passaggio finale della procedura guidata richiede l'origine del parametro. Impostare l'elenco a discesa Origine parametri su Controllo e scegliere il Categories controllo dall'elenco a discesa ControlID. Fare clic su Fine per completare la procedura guidata.

Usare l'elenco a discesa Categorie come origine del parametro categoryID

Figura 11: Usare l'elenco categoryID a discesa come origine del parametro (fare clic per visualizzare l'immagineCategories full-size)

Al termine della procedura guidata ObjectDataSource, Visual Studio aggiungerà BoundFields e checkBoxField per ognuno dei campi dati del prodotto. È possibile personalizzare questi campi come si vede.

Visitare la pagina tramite un browser. Quando si visita la pagina, la categoria Bevande è selezionata e i prodotti corrispondenti elencati nella griglia. La modifica dell'elenco a discesa in una categoria alternativa, come illustrato nella figura 12, causa un postback e ricarica la griglia con i prodotti della categoria appena selezionata.

Vengono visualizzati i prodotti nella categoria Produce

Figura 12: i prodotti nella categoria Produce vengono visualizzati (Fare clic per visualizzare l'immagine a dimensioni complete)

Passaggio 5: Wrapping di istruzioni di stored procedure nell'ambito di una transazione

Nell'esercitazione Modifiche al database di wrapping all'interno di un'esercitazione sulle transazioni sono stati illustrati i metodi per eseguire una serie di istruzioni di modifica del database nell'ambito di una transazione. Tenere presente che le modifiche eseguite sotto l'ambito di una transazione hanno esito positivo o negativo, garantendo l'atomicità. Le tecniche per l'uso delle transazioni includono:

  • Uso delle classi nello System.Transactions spazio dei nomi,
  • Avere il livello di accesso ai dati usare le classi ADO.NET come SqlTransaction, e
  • Aggiunta dei comandi delle transazioni T-SQL direttamente all'interno della stored procedure

L'esercitazione Modifica del database di wrapping all'interno di un'esercitazione sulle transazioni ha usato le classi ADO.NET nel DAL. La parte restante di questa esercitazione illustra come gestire una transazione usando i comandi T-SQL dall'interno di una stored procedure.

I tre comandi SQL della chiave per l'avvio manuale, il commit e il rollback di una transazione sono BEGIN TRANSACTIONrispettivamente , COMMIT TRANSACTIONe ROLLBACK TRANSACTION, . Come per l'approccio ADO.NET, quando si usano transazioni da una stored procedure è necessario applicare il modello seguente:

  1. Indicare l'inizio di una transazione.
  2. Eseguire le istruzioni SQL che comprendono la transazione.
  3. Se si verifica un errore in una delle istruzioni del passaggio 2, eseguire il rollback della transazione
  4. Se tutte le istruzioni del passaggio 2 vengono completate senza errori, eseguire il commit della transazione.

Questo modello può essere implementato nella sintassi T-SQL usando il modello seguente:

BEGIN TRY
  BEGIN TRANSACTION -- Start the transaction
  ... Perform the SQL statements that makeup the transaction ...
  -- If we reach here, success!
  COMMIT TRANSACTION
END TRY
BEGIN CATCH 
  -- Whoops, there was an error
  ROLLBACK TRANSACTION
  -- Raise an error with the 
  -- details of the exception   
  DECLARE @ErrMsg nvarchar(4000),
          @ErrSeverity int 
  SELECT @ErrMsg = ERROR_MESSAGE(), 
         @ErrSeverity = ERROR_SEVERITY() 
 
  RAISERROR(@ErrMsg, @ErrSeverity, 1) 
END CATCH

Il modello inizia definendo un TRY...CATCH blocco, un costrutto nuovo per SQL Server 2005. Analogamente ai try...catch blocchi in C#, il blocco SQL TRY...CATCH esegue le istruzioni nel TRY blocco. Se un'istruzione genera un errore, il controllo viene immediatamente trasferito al CATCH blocco.

Se non sono presenti errori durante l'esecuzione delle istruzioni SQL che costituiscono la transazione, l'istruzione COMMIT TRANSACTION esegue il commit delle modifiche e completa la transazione. Se, tuttavia, una delle istruzioni genera un errore, nel ROLLBACK TRANSACTIONCATCH blocco restituisce il database allo stato precedente all'inizio della transazione. La stored procedure genera anche un errore usando il comando RAISERROR, che causa la generazione di un SqlException oggetto nell'applicazione.

Nota

Poiché il blocco è nuovo a SQL Server 2005, il TRY...CATCH modello precedente non funzionerà se si usano versioni precedenti di Microsoft SQL Server.

Esaminiamo un esempio concreto. Esiste un vincolo di chiave esterna tra le Categories tabelle e Products , ovvero ogni CategoryID campo della Products tabella deve eseguire il mapping a un CategoryID valore nella Categories tabella. Qualsiasi azione che viola questo vincolo, ad esempio il tentativo di eliminare una categoria che ha associato prodotti, comporta una violazione del vincolo di chiave esterna. Per verificare questo problema, rivedere l'esempio Di aggiornamento ed eliminazione di dati binari esistenti nella sezione Uso dei dati binari (~/BinaryData/UpdatingAndDeleting.aspx). Questa pagina elenca ogni categoria nel sistema insieme ai pulsanti Modifica ed Eliminazione (vedere La figura 13), ma se si tenta di eliminare una categoria associata, ad esempio Bevande, l'eliminazione non riesce a causa di una violazione del vincolo di chiave esterna (vedere la figura 14).

Ogni categoria viene visualizzata in un controllo GridView con pulsanti modifica ed eliminazione

Figura 13: ogni categoria viene visualizzata in un controllo GridView con modifica ed eliminazione pulsanti (fare clic per visualizzare l'immagine full-size)

Non è possibile eliminare una categoria con prodotti esistenti

Figura 14: Non è possibile eliminare una categoria con prodotti esistenti (fare clic per visualizzare l'immagine full-size)

Si supponga, tuttavia, che si voglia consentire l'eliminazione delle categorie indipendentemente dal fatto che siano associati prodotti. Dovrebbe essere eliminata una categoria con prodotti, si supponga di voler eliminare anche i suoi prodotti esistenti (anche se un'altra opzione sarebbe semplicemente impostare i valori dei prodotti CategoryID su NULL). Questa funzionalità può essere implementata tramite le regole a catena del vincolo di chiave esterna. In alternativa, è possibile creare una stored procedure che accetta un @CategoryID parametro di input e, quando richiamata, elimina in modo esplicito tutti i prodotti associati e quindi la categoria specificata.

Il primo tentativo di una stored procedure potrebbe essere simile al seguente:

CREATE PROCEDURE dbo.Categories_Delete
(
    @CategoryID int
)
AS
-- First, delete the associated products...
DELETE FROM Products
WHERE CategoryID = @CategoryID
-- Now delete the category
DELETE FROM Categories
WHERE CategoryID = @CategoryID

Anche se questo eliminerà sicuramente i prodotti e la categoria associati, non lo fa sotto l'ambito di una transazione. Si supponga che vi sia un altro vincolo di chiave esterna su Categories questo impedire l'eliminazione di un determinato @CategoryID valore. Il problema è che in tal caso tutti i prodotti verranno eliminati prima di tentare di eliminare la categoria. Il risultato netto è che per tale categoria, questa stored procedure rimuoverà tutti i suoi prodotti mentre la categoria rimaneva poiché ha ancora record correlati in alcune altre tabelle.

Se la stored procedure è stata sottoposta a wrapping all'interno dell'ambito di una transazione, tuttavia, le eliminazioni nella Products tabella verranno eseguito il rollback a fronte di un'eliminazione non riuscita in Categories. Lo script della stored procedure seguente usa una transazione per garantire l'atomicità tra le due DELETE istruzioni:

CREATE PROCEDURE dbo.Categories_Delete
(
    @CategoryID int
)
AS
BEGIN TRY
  BEGIN TRANSACTION -- Start the transaction
  -- First, delete the associated products...
  DELETE FROM Products
  WHERE CategoryID = @CategoryID
  -- Now delete the category
  DELETE FROM Categories
  WHERE CategoryID = @CategoryID
  -- If we reach here, success!
  COMMIT TRANSACTION
END TRY
BEGIN CATCH 
  -- Whoops, there was an error
  ROLLBACK TRANSACTION
  -- Raise an error with the 
  -- details of the exception   
  DECLARE @ErrMsg nvarchar(4000),
          @ErrSeverity int 
  SELECT @ErrMsg = ERROR_MESSAGE(), 
         @ErrSeverity = ERROR_SEVERITY() 
 
  RAISERROR(@ErrMsg, @ErrSeverity, 1) 
END CATCH

È necessario aggiungere la Categories_Delete stored procedure al database Northwind. Per istruzioni sull'aggiunta di stored procedure a un database, fare riferimento al passaggio 1.

Passaggio 6: AggiornamentoCategoriesTableAdapter

Anche se è stata aggiunta la Categories_Delete stored procedure al database, il servizio dal servizio di distribuzione è attualmente configurato per l'uso di istruzioni SQL ad hoc per eseguire l'eliminazione. È necessario aggiornare e CategoriesTableAdapter indicare che usare invece la Categories_Delete stored procedure.

Nota

In precedenza in questa esercitazione è stato eseguito l'uso di NorthwindWithSprocs DataSet. Tuttavia, DataSet dispone solo di una singola entità, ProductsDataTablee è necessario usare le categorie. Pertanto, per la parte restante di questa esercitazione quando si parla del livello di accesso ai dati si fa riferimento a DataSet, quello creato per la prima volta nell'esercitazione Creazione di un livello di accesso ai Northwind dati.

Aprire Northwind DataSet, selezionare e CategoriesTableAdapterpassare alla Finestra Proprietà. Il Finestra Proprietà elenca le informazioni di InsertCommandconnessione , , DeleteCommandUpdateCommande SelectCommand usate da TableAdapter, nonché il relativo nome e le informazioni di connessione. Espandere la proprietà per visualizzarne i DeleteCommand dettagli. Come illustrato nella figura 15, la DeleteCommand proprietà s CommandType è impostata su Text, che indica di inviare il testo nella CommandText proprietà come query SQL ad hoc.

Selezionare CategorieTableAdapter nella Designer per visualizzarne le proprietà nella finestra Proprietà

Figura 15: selezionare l'oggetto nella Designer per visualizzarne le CategoriesTableAdapter proprietà nella finestra Proprietà

Per modificare queste impostazioni, selezionare il testo (DeleteCommand) nel Finestra Proprietà e scegliere (Nuovo) dall'elenco a discesa. In questo modo verranno cancellate le impostazioni per le CommandTextproprietà , CommandTypee Parameters . Impostare quindi la CommandType proprietà su StoredProcedure e quindi digitare il nome della stored procedure per (CommandTextdbo.Categories_Delete). Se si assicura di immettere le proprietà in questo ordine: prima l'oggetto CommandType e quindi visual Studio popola automaticamente l'insieme CommandText Parameters. Se non si immettono queste proprietà in questo ordine, è necessario aggiungere manualmente i parametri tramite l'insieme Parameters Editor. In entrambi i casi, è consigliabile fare clic sui puntini di sospensione nella proprietà Parameters per visualizzare l'insieme Parameters Editor per verificare che siano state apportate le modifiche delle impostazioni dei parametri corrette (vedere figura 16). Se non viene visualizzato alcun parametro nella finestra di dialogo, aggiungere manualmente il @CategoryID parametro (non è necessario aggiungere il @RETURN_VALUE parametro).

Assicurarsi che le impostazioni dei parametri siano corrette

Figura 16: verificare che le impostazioni dei parametri siano corrette

Dopo l'aggiornamento di DAL, l'eliminazione di una categoria eliminerà automaticamente tutti i prodotti associati e lo farà sotto l'ambito di una transazione. Per verificare questa operazione, tornare alla pagina Aggiornamento ed eliminazione di dati binari esistenti e fare clic sul pulsante Elimina per una delle categorie. Con un singolo clic del mouse, la categoria e tutti i relativi prodotti associati verranno eliminati.

Nota

Prima di testare la Categories_Delete stored procedure, che eliminerà un numero di prodotti insieme alla categoria selezionata, potrebbe essere prudente eseguire una copia di backup del database. Se si usa il NORTHWND.MDF database in App_Data, chiudere semplicemente Visual Studio e copiare i file MDF e LDF in App_Data alcune altre cartelle. Dopo aver testato la funzionalità, è possibile ripristinare il database chiudendo Visual Studio e sostituendo i file MDF e LDF correnti in App_Data con le copie di backup.

Riepilogo

Mentre la procedura guidata TableAdapter genererà automaticamente stored procedure per l'utente, ci sono momenti in cui potrebbero essere già state create tali stored procedure o si vuole crearle manualmente o con altri strumenti. Per soddisfare tali scenari, è anche possibile configurare TableAdapter per puntare a una stored procedure esistente. In questa esercitazione è stato illustrato come aggiungere manualmente stored procedure a un database tramite l'ambiente di Visual Studio e come collegare i metodi TableAdapter a queste stored procedure. Sono stati esaminati anche i comandi T-SQL e il modello di script usati per avviare, eseguire il commit e eseguire il rollback delle transazioni dall'interno di una stored procedure.

Programmazione felice!

Informazioni sull'autore

Scott Mitchell, autore di sette libri ASP/ASP.NET e fondatore di 4GuysFromRolla.com, lavora con le tecnologie Web Microsoft dal 1998. Scott lavora come consulente indipendente, formatore e scrittore. Il suo ultimo libro è Sams Teach Yourself ASP.NET 2.0 in 24 ore. Può essere raggiunto all'indirizzo mitchell@4GuysFromRolla.com. o tramite il suo blog, disponibile all'indirizzo http://ScottOnWriting.NET.

Grazie speciale a

Questa serie di esercitazioni è stata esaminata da molti revisori utili. I revisori principali di questa esercitazione sono stati Hilton Geisenow, S ren Jacob Lauritsen e Teresa Murphy. Si è interessati a esaminare i prossimi articoli MSDN? In tal caso, rilasciami una riga in mitchell@4GuysFromRolla.com.