Chiamata alle stored procedure di SQL Server in ASP.NET utilizzando Visual Basic .NET

Traduzione articoli Traduzione articoli
Identificativo articolo: 306574 - Visualizza i prodotti a cui si riferisce l?articolo.
Questo articolo è stato precedentemente pubblicato con il codice di riferimento I306574
Espandi tutto | Chiudi tutto

In questa pagina

Sommario

In questo articolo viene illustrato come utilizzare ASP.NET e ADO.NET con Visual Basic .NET per creare e chiamare una stored procedure di Microsoft SQL Server con un parametro di input e uno di output.

Il codice di esempio contenuto in questo articolo consente di controllare prima di tutto se la stored procedure che verrà creata esiste nel database. In caso contrario, verrà creata una stored procedure che accetti un parametro per la ricerca nella tabella Authors in base al cognome e restituisca le righe e i numeri delle righe corrispondenti incluse in un parametro di output.

In questo articolo viene anche descritto come creare un Web Form che fornisca una semplice interfaccia utente. Il Web Form contiene le seguenti voci:
  • Una casella di testo nella quale l'utente digita le condizioni per la ricerca.
  • Un controllo DataGrid per la visualizzazione dei risultati della ricerca.
  • Un controllo Label per la visualizzazione del numero di record restituiti.
  • Un controllo Button che chiama la stored procedure quando l'utente fa clic sul pulsante.

Requisiti

Nell'elenco che segue vengono indicati l'hardware, il software, l'infrastruttura di rete e i service pack richiesti:
  • Microsoft SQL Server 7.0 o versione successiva
  • Microsoft Visual Studio .NET
  • Microsoft Visual Basic .NET
  • Autorizzazioni per la creazione di stored procedure nel database
In questo articolo si presume la conoscenza dei seguenti argomenti:
  • Stored procedure di SQL Server

Creazione di un progetto ASP.NET e aggiunta di controlli

In questa sezione verrà creato un progetto ASP.NET e generata l'interfaccia utente di base. Durante l'esecuzione di questa procedura viene utilizzato il codice di Microsoft Visual Basic .NET. Per creare il progetto, attenersi alla seguente procedura:
  1. Fare clic sul pulsante Start, scegliere Programmi, Microsoft Visual Studio .NET, quindi Microsoft Visual Studio .NET.
  2. Nella pagina iniziale di Visual Studio .NET fare clic su Nuovo progetto.
  3. Nella finestra di dialogo Nuovo progetto selezionare Progetti di Visual Basic in Tipi progetto, quindi fare clic su Applicazione Web ASP.NET in Modelli.
  4. Nella casella Nome digitare il nome dell'applicazione Web, quindi scegliere OK.
  5. Aggiungere i seguenti controlli server al Web Form, quindi impostare le proprietà come sono elencate nella tabella:
    Riduci questa tabellaEspandi questa tabella
    ControlloProprietà IDProprietà del testo
    LabellblLastNameImmettere il cognome dell'autore:
    TextBoxtxtLastName%
    ButtonbtnGetAuthorsOttieni autori
    LabellblRowCount(Conteggio righe)

  6. Trascinare un controllo server DataGrid dalla Casella degli strumenti nel Web Form, quindi impostare la proprietà Name su GrdAuthors.
  7. Fare clic con il pulsante destro del mouse sulla griglia, quindi scegliere Formattazione automatica.
  8. Fare clic su Professionale 1 per impostare lo schema, quindi scegliere OK.

Creazione della stored procedure GetAuthorsByLastName

Utilizzare il seguente codice Transact-SQL (T-SQL) per creare la stored procedure GetAuthorsByLastName:
Create Procedure GetAuthorsByLastName1 (@au_lname varchar(40), @RowCount int output)  
come 

select * from authors where au_lname like @au_lname; 

/* @@ROWCOUNT returns the number of rows that are affected by the last statement. */ 
select @RowCount=@@ROWCOUNT
				
Nel codice precedente sono inclusi due parametri: @au_lname e @RowCount. @au_lname è un parametro di input che ottiene la stringa di ricerca per eseguire una ricerca "like" nella tabella Authors. @RowCount è un parametro di output che utilizza la variabile @@ROWCOUNT per ottenere le righe richieste.

Creazione ed esecuzione della stored procedure

Per accedere ai database SQL Server è necessario importare lo spazio dei nomi System.Data.SqlClient tramite il quale vengono forniti nuovi oggetti, quali SqlDataReader e SqlDataAdapter. È possibile utilizzare l'oggetto SqlDataReader per leggere un flusso di righe di tipo forward-only da un database SQL Server. DataAdapter rappresenta un set di comandi di dati e una connessione al database che è possibile utilizzare per inserire dati nell'oggetto DataSet e aggiornare il database SQL Server.

Con ADO.NET viene inoltre introdotto l'oggetto DataSet, una rappresentazione dei dati residente in memoria che fornisce un modello di programmazione relazionale coerente e indipendente dall'origine dati. Nel codice riportato in questa sezione vengono utilizzati tutti questi oggetti.
  1. Fare doppio clic sul Web Form.
  2. Aggiungere il seguente codice alla sezione Declaration del Web Form, che si trova nella parte superiore della finestra del codice:
    Imports System.Data
    Imports System.Data.SqlClient
    					
  3. Per verificare se la stored procedure esiste e creare una nuova stored procedure, utilizzare un oggetto SqlCommand con un oggetto SqlDataReader. SqlCommand consente di eseguire qualsiasi comando SQL sul database. Chiamare quindi il metodo ExecuteReader di SqlCommand per restituire SqlDataReader che contiene righe corrispondenti per la query.

    Aggiungere il codice riportato di seguito nell'evento Page_Load del Web Form:
    'Only run this code the first time the page is loaded.
    'The code inside the IF statement is skipped when you resubmit the page.
    If Not IsPostBack Then
        Dim MyConnection As SqlConnection
        Dim MyCommand As SqlCommand
        Dim MyDataReader As SqlDataReader
    
        'Create a Connection object.
        MyConnection = New SqlConnection("server=(local);database=pubs;Trusted_Connection=yes")
    
        'Create a Command object, and then set the connection.
        'The following SQL statements check whether a GetAuthorsByLastName stored procedure 
        'already exists.
        MyCommand = New SqlCommand("if object_id('pubs..GetAuthorsByLastName') is not null " + "begin" + " if objectproperty(object_id('pubs..GetAuthorsByLastName'), 'IsProcedure')= 1" + " select object_id('pubs..GetAuthorsByLastName')" + " else" + " return " + "end" + " else" + " return", MyConnection)
    
        With MyCommand
            'Set the command type that you will run.
            .CommandType = CommandType.Text
    
            'Open the connection.
            .Connection.Open()
    
            'Run the SQL statement, and then get the returned rows to the DataReader.
            MyDataReader = .ExecuteReader()
    
            'If any rows are retuned, the stored procedure that you are trying 
            'to create already exists. Therefore, try to create the stored procedure
            'only if it does not exist.
            If Not MyDataReader.Read() Then
                .CommandText = "create procedure GetAuthorsByLastName (@au_lname varchar(40), " & _ 
    
                                "@RowCount int output) " & _ 
    
                                " as select * from authors where au_lname like @au_lname; select @RowCount=@@ROWCOUNT"
                MyDataReader.Close()
                .ExecuteNonQuery()
            Else
                MyDataReader.Close()
            End If
    
            .Dispose()  'Dispose of the Command object.
            MyConnection.Close() 'Close the connection.
        End With
    End If
    					
  4. Chiamare la stored procedure nell'evento Click del pulsante btnGetAuthors e utilizzare l'oggetto SqlDataAdapter per eseguire la stored procedure. È necessario creare parametri per la stored procedure e aggiungerli all'insieme Parameters dell'oggetto SqlDataAdapter.

    Aggiungere il seguente codice dopo l'evento Page_Load:
    Private Sub btnGetAuthors_Click(ByVal sender As System.Object, _
     ByVal e As System.EventArgs) Handles btnGetAuthors.Click
        Dim DS As DataSet
        Dim MyConnection As SqlConnection
        Dim MyDataAdapter As SqlDataAdapter
    
        'Create a connection to the SQL Server.
        MyConnection = New SqlConnection("server=(local);database=pubs;Trusted_Connection=yes")
    
        'Create a DataAdapter, and then provide the name of the stored procedure.
        MyDataAdapter = New SqlDataAdapter("GetAuthorsByLastName", MyConnection)
    
        'Set the command type as StoredProcedure.
        MyDataAdapter.SelectCommand.CommandType = CommandType.StoredProcedure
    
        'Create and add a parameter to Parameters collection for the stored procedure.
        MyDataAdapter.SelectCommand.Parameters.Add(New SqlParameter("@au_lname", _
       SqlDbType.VarChar, 40))
    
        'Assign the search value to the parameter.
        MyDataAdapter.SelectCommand.Parameters("@au_lname").Value = Trim(txtLastName.Text)
    
        'Create and add an output parameter to Parameters collection. 
        MyDataAdapter.SelectCommand.Parameters.Add(New SqlParameter("@RowCount", _
        SqlDbType.Int, 4))
    
        'Set the direction for the parameter. This parameter returns the Rows returned.
        MyDataAdapter.SelectCommand.Parameters("@RowCount").Direction = ParameterDirection.Output
    
        DS = New DataSet() 'Create a new DataSet to hold the records.
        MyDataAdapter.Fill(DS, "AuthorsByLastName") 'Fill the DataSet with the rows returned.
    
        'Get the number of rows returned, and then assign it to the Label control.
        'lblRowCount.Text = DS.Tables(0).Rows.Count().ToString() & " Rows Found!"
        lblRowCount.Text = MyDataAdapter.SelectCommand.Parameters(1).Value & " Rows Found!"
    
        'Set the data source for the DataGrid as the DataSet that holds the rows.
        Grdauthors.DataSource = DS.Tables("AuthorsByLastName").DefaultView
    
        'Bind the DataSet to the DataGrid. 
        'NOTE: If you do not call this method, the DataGrid is not displayed!
        Grdauthors.DataBind()
    
        MyDataAdapter.Dispose() 'Dispose of the DataAdapter.
        MyConnection.Close() 'Close the connection.
    End Sub
    					
  5. In Esplora soluzioni fare clic con il pulsante destro del mouse sulla pagina ASPX, quindi fare clic su Imposta come pagina iniziale.
  6. Salvare il progetto, quindi fare clic su Avvia in Visual Studio .NET. Il progetto viene compilato e viene eseguita la pagina predefinita.
  7. Digitare il cognome dell'autore nella casella di testo, quindi fare clic su Ottieni autori. Viene chiamata la stored procedure e le righe restituite compilano l'oggetto DataGrid.

    È possibile utilizzare stringhe di ricerca di tipo SQL Server come G% che restituisce tutti gli autori, per cognome, che iniziano con la lettera "G".

Risoluzione dei problemi

  • Se non è possibile connettersi al database, verificare che la proprietà ConnectionString faccia riferimento al database SQL Server corretto.
  • Se è possibile connettersi al database ma si riscontrano problemi quando si tenta di creare la stored procedure, assicurarsi di disporre di autorizzazioni sufficienti per creare stored procedure nel database al quale si desidera connettersi.

Riferimenti

Per ulteriori informazioni, vedere i seguenti argomenti nella documentazione di Microsoft .NET Framework Software Development Kit (SDK) (informazioni in lingua inglese):
Overview of ADO.NET
http://msdn.microsoft.com/it-it/library/h43ks021.aspx

ADO.NET DataSet
http://msdn.microsoft.com/it-it/library/zb0sdh0b(VS.71).aspx

Using .NET Data Providers to Access Data
http://msdn.microsoft.com/it-it/library/s7ee2dwt(vs.71).aspx
Per informazioni a carattere generale su ADO.NET o Visual Basic .NET, fare riferimento ai seguenti newsgroup MSDN:
microsoft.public.dotnet.framework.adonet

microsoft.public.dotnet.languages.vb
Per ulteriori informazioni, consultare la pubblicazione seguente:
Wyke, R. Allen, and Sultan Rehman and Brad Leupen. XML Programming (Core Reference). Microsoft Press, 2001.
Per ulteriori informazioni, vedere il seguente corso Microsoft Training & Certification (informazioni in lingua inglese):
2389 Programming with ADO.NET
Per ulteriori informazioni su come effettuare questa operazione mediante Microsoft Active Server Pages, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito:
300488 Esecuzione di stored procedure SQL da una pagina ASP

Proprietà

Identificativo articolo: 306574 - Ultima modifica: mercoledì 24 ottobre 2012 - Revisione: 7.0
Le informazioni in questo articolo si applicano a:
  • Microsoft ASP.NET 1.0
  • Microsoft ASP.NET 1.1
  • Microsoft ADO.NET 1.1
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Visual Basic .NET 2003 Standard Edition
Chiavi: 
kbhowtomaster kbsqlclient kbsystemdata KB306574
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com