Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Nell'esercitazione precedente si è appreso come usare la Creazione guidata TableAdapter per generare nuove stored procedure. In questa esercitazione viene illustrato come la stessa Creazione guidata TableAdapter possa funzionare con le stored procedure esistenti. Si apprenderà anche come aggiungere manualmente nuove stored procedure al database.
Introduzione
Nell'esercitazione precedente è stato illustrato come configurare gli oggetti TableAdapter di DataSet tipizzato per l'uso di stored procedure per accedere ai dati anziché alle istruzioni SQL ad hoc. In particolare, è stato esaminato come creare automaticamente queste stored procedure tramite la procedura guidata TableAdapter. Quando si trasferisce un'applicazione legacy a ASP.NET 2.0 o quando si compila 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 manualmente o tramite uno strumento diverso dalla procedura guidata TableAdapter che genera automaticamente le stored procedure.
In questa esercitazione verrà illustrato come configurare TableAdapter per l'uso di 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 Wrapping delle modifiche al database all'interno di una transazione sono stati aggiunti metodi a TableAdapter per supportare le transazioni (BeginTransaction
, CommitTransaction
e così via). In alternativa, le transazioni possono essere gestite interamente all'interno di una stored procedure, che non richiede alcuna modifica al codice del livello di accesso ai dati. In questa esercitazione verranno esaminati i comandi T-SQL usati per eseguire istruzioni di una stored procedure all'interno dell'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, Ovvero 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, è sufficiente fare clic con il pulsante destro del mouse sulla cartella Stored procedure e scegliere l'opzione Aggiungi nuova stored procedure dal menu di scelta rapida.
Figura 1: Fare clic con il pulsante destro del mouse sulla cartella Stored procedure e aggiungere una nuova stored procedure (fare clic per visualizzare l'immagine a dimensione intera)
Come illustrato nella figura 1, selezionando l'opzione Aggiungi nuova stored procedure si apre una finestra di script in Visual Studio con la struttura dello script SQL necessario per creare la stored procedure. È il processo di compilare questo script ed eseguirlo, a questo punto la stored procedure verrà aggiunta 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 sulla barra degli strumenti o premere CTRL+S. Dopo 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 PROCEDURE
dbo.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 la stored procedure verrà aggiornata con queste modifiche.
La figura 2 mostra Visual Studio dopo il salvataggio della Products_SelectByCategoryID
stored procedure.
Figura 2: La stored procedure Products_SelectByCategoryID
è stata aggiunta al database (fare clic per visualizzare l'immagine a dimensione intera)
Passaggio 2: Configurazione di TableAdapter per l'uso di una stored procedure esistente
Ora che la Products_SelectByCategoryID
stored procedure è stata aggiunta al database, è possibile configurare il livello di accesso ai dati per usare questa stored procedure quando viene richiamato uno dei relativi metodi. In particolare, verrà aggiunto un GetProductsByCategoryID(<_i22_>categoryID)<!--_i22_-->
metodo all'oggetto nell'oggetto ProductsTableAdapter
NorthwindWithSprocs
DataSet tipizzato che chiama la Products_SelectByCategoryID
stored procedure appena creata.
Per iniziare, aprire il NorthwindWithSprocs
set di dati. 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 con TableAdapter. 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.
Figura 3: Scegliere l'opzione Usa stored procedure esistente (fare clic per visualizzare l'immagine a dimensione intera)
Nella schermata seguente viene fornito un elenco a discesa popolato con le stored procedure del database. Se si seleziona 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.
Figura 4: Selezionare la stored procedure (fare clic per visualizzare l'immagine Products_SelectByCategoryID
a dimensione intera)
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 vengono restituiti dati tabulari, 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
oggetto a cui viene assegnato il valore nella prima colonna del primo record restituito dalla stored procedure.
Poiché la Products_SelectByCategoryID
stored procedure restituisce tutti i prodotti appartenenti a una determinata categoria, scegliere la prima risposta, ovvero i dati tabulari, e fare clic su Avanti.
Figura 5: Indicare che la stored procedure restituisce dati tabulari (fare clic per visualizzare l'immagine a dimensione intera)
Tutto ciò che rimane consiste nell'indicare i modelli di metodo da usare seguiti dai nomi per questi metodi. Lasciare selezionate le opzioni Fill a DataTable e Return a DataTable , ma rinominare i metodi in FillByCategoryID
e GetProductsByCategoryID
. Fare quindi clic su Avanti per esaminare un riepilogo delle attività che verranno eseguite dalla procedura guidata. Se tutto sembra corretto, fare clic su Fine.
Figura 6: Assegnare un nome ai metodi FillByCategoryID
e GetProductsByCategoryID
fare clic per visualizzare l'immagine a dimensione intera
Nota
I metodi TableAdapter appena creati FillByCategoryID
e GetProductsByCategoryID
, prevedono un parametro di input di tipo Integer
. Questo valore del parametro di input viene passato alla stored procedure tramite il relativo @CategoryID
parametro. Se si modificano i parametri della Products_SelectByCategory
stored procedure, sarà necessario aggiornare anche i parametri per questi metodi TableAdapter. Come illustrato nell'esercitazione precedente, questa operazione può essere eseguita in due modi: aggiungendo o rimuovendo manualmente i parametri dalla raccolta di parametri o eseguendo di nuovo 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 Function GetProductsByCategoryID(ByVal categoryID As Integer) _
As NorthwindWithSprocs.ProductsDataTable
Return Adapter.GetProductsByCategoryID(categoryID)
End Function
Questo metodo BLL restituisce semplicemente l'oggetto ProductsDataTable
restituito dal ProductsTableAdapter
metodo s GetProductsByCategoryID
. L'attributo DataObjectMethodAttribute
fornisce i metadati usati dalla procedura guidata Configura origine dati di ObjectDataSource. In particolare, questo metodo verrà visualizzato nell'elenco a discesa della scheda SELECT.
Passaggio 4: Visualizzazione di prodotti per categoria
Per testare la stored procedure appena aggiunta Products_SelectByCategoryID
e i metodi DAL e BLL corrispondenti, creare una pagina ASP.NET che contiene 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 dell'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 finestra di progettazione. Impostare la proprietà DropDownList su ID
e la relativa AutoPostBack
proprietà su True
.Categories
Successivamente, dallo smart tag associare DropDownList a un nuovo ObjectDataSource denominato CategoriesDataSource
. Configurare ObjectDataSource in modo che recuperi i dati dal CategoriesBLL
metodo della classe.GetCategories
Impostare gli elenchi a discesa nelle schede UPDATE, INSERT e DELETE su (Nessuno).
Figura 7: Recuperare dati dal CategoriesBLL
metodo della GetCategories
classe (fare clic per visualizzare l'immagine a dimensione intera)
Figura 8: Impostare gli elenchi a discesa nelle schede UPDATE, INSERT e DELETE su (Nessuno) (Fare clic per visualizzare l'immagine a dimensione intera)
Dopo aver completato la procedura guidata ObjectDataSource, configurare DropDownList per visualizzare il CategoryName
campo dati e usare il CategoryID
campo come per Value
ogni ListItem
oggetto .
A questo punto, il markup dichiarativo dropDownList e ObjectDataSource dovrebbe 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 un controllo GridView nella finestra di progettazione, posizionandolo sotto l'elenco a discesa. Impostare GridView su ID
ProductsByCategory
e, dallo smart tag, associarlo a un nuovo ObjectDataSource denominato ProductsByCategoryDataSource
. Configurare ObjectDataSource per l'uso ProductsByCategoryDataSource
della ProductsBLLWithSprocs
classe , in modo che recuperi i dati 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.
Figura 9: Configurare ObjectDataSource per l'uso della classe (fare clic per visualizzare l'immagine ProductsBLLWithSprocs
a dimensione intera)
Figura 10: Recuperare dati dal GetProductsByCategoryID(categoryID)
metodo (fare clic per visualizzare l'immagine a dimensione intera)
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.
Figura 11: Usare l'elenco Categories
a discesa come origine del categoryID
parametro (fare clic per visualizzare l'immagine a dimensione intera)
Al termine della procedura guidata ObjectDataSource, Visual Studio aggiungerà BoundFields e checkBoxField per ognuno dei campi dati del prodotto. È possibile personalizzare questi campi in base alle esigenze.
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, comporta un postback e ricarica la griglia con i prodotti della categoria appena selezionata.
Figura 12: Vengono visualizzati i prodotti nella categoria Produce (fare clic per visualizzare l'immagine a dimensione intera)
Passaggio 5: Wrapping di istruzioni di una stored procedure all'interno dell'ambito di una transazione
Nell'esercitazione Wrapping delle modifiche al database in un'esercitazione sulle transazioni sono illustrate le tecniche 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 spazio dei
System.Transactions
nomi , - Avere il livello di accesso ai dati usare ADO.NET classi come
SqlTransaction
, e - Aggiunta dei comandi di transazione T-SQL direttamente all'interno della stored procedure
L'esercitazione Wrapping delle modifiche al database all'interno di una transazione ha usato le classi ADO.NET in DAL. Nella parte restante di questa esercitazione viene illustrato 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 TRANSACTION
rispettivamente , COMMIT TRANSACTION
e ROLLBACK TRANSACTION
. Analogamente all'approccio ADO.NET, quando si usano transazioni dall'interno di una stored procedure è necessario applicare il modello seguente:
- Indicare l'inizio di una transazione.
- Eseguire le istruzioni SQL che costituiscono la transazione.
- Se si verifica un errore in una delle istruzioni del passaggio 2, eseguire il rollback della transazione.
- 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 in SQL Server 2005. Analogamente ai Try...Catch
blocchi in Visual Basic, 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, ROLLBACK TRANSACTION
nel CATCH
blocco restituisce il database al relativo stato prima dell'inizio della transazione. La stored procedure genera anche un errore usando il comando RAISERROR, che causa la generazione di un oggetto SqlException
nell'applicazione.
Nota
Poiché il TRY...CATCH
blocco non è una novità di SQL Server 2005, il 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 essere mappato a un CategoryID
valore nella Categories
tabella. Qualsiasi azione che viola questo vincolo, ad esempio il tentativo di eliminare una categoria con prodotti associati, comporta una violazione del vincolo di chiave esterna. Per verificarlo, rivedere l'esempio Aggiornamento ed eliminazione di dati binari esistenti nella sezione Working with Binary Data (~/BinaryData/UpdatingAndDeleting.aspx
). Questa pagina elenca ogni categoria nel sistema insieme ai pulsanti Modifica ed Elimina (vedere la figura 13), ma se si tenta di eliminare una categoria con prodotti associati, ad esempio Bevande, l'eliminazione ha esito negativo a causa di una violazione del vincolo di chiave esterna (vedere la figura 14).
Figura 13: Ogni categoria viene visualizzata in un controllo GridView con pulsanti modifica ed eliminazione (fare clic per visualizzare l'immagine a dimensione intera)
Figura 14: Non è possibile eliminare una categoria con prodotti esistenti (fare clic per visualizzare l'immagine a dimensione intera)
Si supponga, tuttavia, di voler consentire l'eliminazione delle categorie indipendentemente dal fatto che siano associati prodotti. Se una categoria con prodotti venga eliminata, si supponga di voler eliminare anche i prodotti esistenti (anche se un'altra opzione consiste nell'impostare semplicemente 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 richiamato, elimina in modo esplicito tutti i prodotti associati e quindi la categoria specificata.
Il primo tentativo di una stored procedure di questo tipo 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 ciò eliminerà sicuramente i prodotti e la categoria associati, non lo fa sotto l'ombrello di una transazione. Si supponga che esista un altro vincolo di chiave esterna su Categories
cui impedirebbe l'eliminazione di un determinato @CategoryID
valore. Il problema è che in questo caso tutti i prodotti verranno eliminati prima di tentare di eliminare la categoria. Il risultato netto è che per tale categoria, questa stored procedure rimuoverebbe tutti i suoi prodotti mentre la categoria è rimasta poiché ha ancora record correlati in un'altra tabella.
Se la stored procedure è stata sottoposta a wrapping nell'ambito di una transazione, tuttavia, verrà eseguito il rollback delle eliminazioni nella Products
tabella in caso di eliminazione non riuscita in Categories
. Lo script di 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
Attendere qualche minuto per aggiungere la Categories_Delete
stored procedure al database Northwind. Fare riferimento al passaggio 1 per istruzioni sull'aggiunta di stored procedure a un database.
Passaggio 6: Aggiornamento diCategoriesTableAdapter
Anche se è stata aggiunta la Categories_Delete
stored procedure al database, il servizio dal è attualmente configurato per l'uso di istruzioni SQL ad hoc per eseguire l'eliminazione. È necessario aggiornare e indicare all'utente CategoriesTableAdapter
di usare invece la Categories_Delete
stored procedure.
Nota
In precedenza in questa esercitazione si stava lavorando con DataSet NorthwindWithSprocs
. Tuttavia, DataSet ha solo una singola entità, ProductsDataTable
, ed è necessario lavorare con le categorie. Pertanto, per il resto di questa esercitazione quando si parla del livello di accesso ai dati si fa riferimento a Northwind
DataSet, quello creato per la prima volta nell'esercitazione Creazione di un livello di accesso ai dati.
Aprire Northwind DataSet, selezionare e CategoriesTableAdapter
passare al Finestra Proprietà. Il Finestra Proprietà elenca , InsertCommand
UpdateCommand
DeleteCommand
, e SelectCommand
usato da TableAdapter, nonché il 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.
Figura 15: Selezionare CategoriesTableAdapter
in Progettazione per visualizzarne le 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 CommandText
proprietà , CommandType
e Parameters
. Impostare quindi la CommandType
proprietà su StoredProcedure
e quindi digitare il nome della stored procedure per (CommandText
dbo.Categories_Delete
). Se si assicura di immettere le proprietà in questo ordine, prima e CommandType
quindi in CommandText
, Visual Studio popola automaticamente l'insieme Parameters. Se non si immettono queste proprietà in questo ordine, sarà necessario aggiungere manualmente i parametri tramite l'editor dell'insieme Parameters. In entrambi i casi, è consigliabile fare clic sui puntini di sospensione nella proprietà Parameters per visualizzare l'editor dell'insieme Parameters per verificare che siano state apportate le modifiche corrette alle impostazioni dei parametri (vedere la figura 16). Se non vengono visualizzati parametri nella finestra di dialogo, aggiungere manualmente il @CategoryID
parametro (non è necessario aggiungere il @RETURN_VALUE
parametro).
Figura 16: Assicurarsi che le impostazioni dei parametri siano corrette
Una volta aggiornato il dal, l'eliminazione di una categoria eliminerà automaticamente tutti i prodotti associati e lo farà sotto l'ambito di una transazione. Per verificarlo, tornare alla pagina Aggiornamento ed eliminazione di dati binari esistenti e fare clic sul pulsante Elimina per una delle categorie. Con un solo clic del mouse, la categoria e tutti i relativi prodotti associati verranno eliminati.
Nota
Prima di testare la Categories_Delete
stored procedure, che eliminerà una serie di prodotti insieme alla categoria selezionata, potrebbe essere consigliabile creare una copia di backup del database. Se si usa il NORTHWND.MDF
database in App_Data
, è sufficiente chiudere Visual Studio e copiare i file MDF e LDF in App_Data
un'altra cartella. 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
Anche se la procedura guidata di TableAdapter genererà automaticamente stored procedure, in alcuni casi è possibile che tali stored procedure siano già state create o che si vogliano crearle manualmente o con altri strumenti. Per soddisfare questi scenari, è anche possibile configurare TableAdapter in modo che punti 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 il rollback delle transazioni dall'interno di una stored procedure.
Buon programmatori!
Informazioni sull'autore
Scott Mitchell, autore di sette libri ASP/ASP.NET e fondatore di 4GuysFromRolla.com, ha lavorato 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, che può essere trovato all'indirizzo http://ScottOnWriting.NET.
Grazie speciale a
Questa serie di esercitazioni è stata esaminata da molti revisori utili. I revisori potenziali per questa esercitazione sono stati Hilton Geisenow, S ren Jacob Lauritsen e Teresa Murphy. Si è interessati a esaminare i prossimi articoli MSDN? In tal caso, rilasciarmi una riga in mitchell@4GuysFromRolla.com.