Jak wywoływać procedury przechowywane programu SQL Server w środowisku ASP.NET przy użyciu języka Visual Basic .NET

Tłumaczenia artykułów Tłumaczenia artykułów
Numer ID artykułu: 306574 - Zobacz jakich produktów dotyczą zawarte w tym artykule porady.
Ten artykuł został opublikowany wcześniej pod numerem PL306574
Rozwiń wszystko | Zwiń wszystko

Na tej stronie

Streszczenie

W tym artykule przedstawiono sposób, w jaki można utworzyć i wywołać procedurę przechowywaną programu Microsoft SQL Server z parametrem wejściowym i wyjściowym za pomocą aplikacji ASP.NET i ADO.NET w języku Visual Basic .NET.

Przykładowy kod w tym artykule sprawdza najpierw, czy nazwa tworzonej procedury przechowywanej już istnieje w bazie danych. Jeśli tak nie jest, tworzony jest kod procedury przechowywanej o jednym parametrze umożliwiającym wyszukanie nazwiska w tabeli Authors oraz parametrze wyjściowym zwracającym pasujące wiersze i ich liczbę.

W tym artykule przedstawiono również sposób utworzenia formularza sieci Web zapewniającego prosty interfejs użytkownika. Na formularzu sieci Web znajdują się następujące elementy:
  • pole tekstowe do wprowadzania kryteriów wyszukiwania,
  • formant DataGrid wyświetlający wyniki wyszukiwania,
  • formant Label wyświetlający liczbę zwróconych rekordów,
  • przycisk Button, którego kliknięcie spowoduje wywołanie procedury przechowywanej.

Wymagania

Na następującej liście wymieniono zalecane składniki sprzętu, oprogramowania oraz infrastruktury sieciowej i wymagane dodatki Service Pack:
  • program Microsoft SQL Server 7.0 lub nowszy,
  • program Microsoft Visual Studio .NET,
  • program Microsoft Visual Basic .NET,
  • uprawnienia do tworzenia procedur przechowywanych w bazie danych.
W tym artykule założono, że użytkownik zapoznał się z następującymi zagadnieniami:
  • Procedury przechowywane programu SQL Server

Tworzenie projektu ASP.NET i dodawanie kontrolek

W tej sekcji omówiono tworzenie projektu ASP.NET i konstruowanie podstawowego interfejsu użytkownika. Należy zwrócić uwagę, że są to procedury korzystające z kodu programu Microsoft Visual Basic .NET. Aby utworzyć projekt, wykonaj następujące kroki:
  1. Kliknij przycisk Start, wskaż polecenie Programy, wskaż polecenie Microsoft Visual Studio .NET, a następnie kliknij polecenie Microsoft Visual Studio .NET.
  2. Na stronie początkowej programu Visual Studio .NET kliknij przycisk New Project.
  3. W oknie dialogowym New Project kliknij pozycję Visual Basic Projects w obszarze Project Types, a następnie kliknij pozycję ASP.NET Web Application w obszarze Templates.
  4. W polu Nazwa wpisz nazwę aplikacji sieci Web, a następnie kliknij przycisk OK.
  5. Dodaj do formularza sieci Web następujące formanty serwera i skonfiguruj ich właściwości zgodnie z informacjami, które podano w tabeli:
    Zwiń tę tabelęRozwiń tę tabelę
    FormantWłaściwość IDWłaściwość Text
    LabellblLastNameWpisz nazwisko autora:
    PoleTekstowetxtLastName%
    PrzyciskbtnGetAuthorsPobierz autorów
    LabellblRowCount(Licznik wierszy)

  6. Przeciągnij formant serwera DataGrid z przybornika na formularz sieci Web, a następnie ustaw właściwość Name na wartość GrdAuthors.
  7. Kliknij prawym przyciskiem myszy siatkę, a następnie kliknij polecenie Autoformat.
  8. Kliknij schemat Professional 1, a następnie kliknij przycisk OK.

Tworzenie procedury składowanej GetAuthorsByLastName

Poniższy kod Transact-SQL umożliwia utworzenie procedury składowanej GetAuthorsByLastName:
Create Procedure GetAuthorsByLastName1 (@au_lname varchar(40), @RowCount int output)  
as 

select * from authors where au_lname like @au_lname; 

/* @@ROWCOUNT zwraca liczbę wierszy, których dotyczy ostatnia instrukcja. */ 
select @RowCount=@@ROWCOUNT
				
W kodzie tym znajdują się dwa parametry: @au_lname i @RowCount. @Au_lname to parametr wejściowy zawierający ciąg wyszukiwany podczas operacji wyszukiwania „like” wykonywanej w tabeli Authors. @RowCount to parametr wyjściowy zwracający liczbę wierszy za pomocą zmiennej @@ROWCOUNT.

Tworzenie i uruchamianie procedury składowanej

Aby uzyskać dostęp do baz danych programu SQL Server, należy zaimportować obszar nazw System.Data.SqlClient, który udostępnia nowe obiekty, takie jak SqlDataReader i SqlDataAdapter. Za pomocą obiektu SqlDataReader można progresywnie odczytywać strumień wierszy z bazy danych programu SQL Server. Obiekt DataAdapter to zestaw poleceń związanych z danymi oraz połączenie bazy danych, dzięki któremu można wypełnić obiekt DataSet i zaktualizować bazę danych programu SQL Server.

W środowisku ADO.NET wprowadzono również obiekt DataSet, który reprezentuje dane rezydentne zapewniające spójny, relacyjny model programowania niezależnie od źródła danych. W kodzie, który znajduje się w tej sekcji, użyto wszystkich tych obiektów.
  1. Kliknij dwukrotnie formularz sieci Web.
  2. Dodaj poniższy kod do sekcji deklaracji (Declaration) formularza sieci Web, w górnej części okna kodu:
    Imports System.Data
    Imports System.Data.SqlClient
    					
  3. Aby się upewnić, że procedura przechowywana istnieje, i utworzyć nową procedurę przechowywaną, należy użyć obiektu SqlCommand w połączeniu z obiektem SqlDataReader. Za pomocą obiektu SqlCommand można uruchomić dowolne polecenie SQL w bazie danych. Następnie należy wywołać metodę ExecuteReader obiektu SqlCommand, która zwróci obiekt SqlDataReader zawierający wiersze spełniające kryteria kwerendy.

    Dodaj poniższy kod do zdarzenia Page_Load (zdarzenia ładowania strony) formularza sieci Web:
    'Ten kod ma być uruchamiany tylko wtedy, gdy strona jest ładowana po raz pierwszy.
    'Kod wewnątrz instrukcji IF zostanie pominięty po ponownym przesłaniu strony.
    If Not IsPostBack Then
        Dim MyConnection As SqlConnection
        Dim MyCommand As SqlCommand
        Dim MyDataReader As SqlDataReader
    
        'Utworzenie obiektu Connection.
        MyConnection = New SqlConnection("server=(local);database=pubs;Trusted_Connection=yes")
    
        'Utworzenie obiektu Command, a następnie skonfigurowanie połączenia.
        'Poniższe instrukcje języka SQL sprawdzają, czy procedura przechowywana GetAuthorsByLastName 
        'już istnieje.
        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
            'Ustawienie typu uruchamianego polecenia.
            .CommandType = CommandType.Text
    
            'Otwarcie połączenia.
            .Connection.Open()
    
            'Uruchomienie instrukcji języka SQL, a następnie pobranie zwróconych wierszy do obiektu DataReader.
            MyDataReader = .ExecuteReader()
    
            'Jeśli zostały zwrócone jakiekolwiek wiersze, tworzona procedura przechowywana 
            'już istnieje. Dlatego zostanie podjęta próba utworzenia procedury przechowywanej tylko wtedy,
            'gdy jeszcze nie istnieje.
            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()  'Usunięcie obiektu Command.
            MyConnection.Close() 'Zamknięcie połączenia.
        End With
    End If
    					
  4. Wywołaj procedurę przechowywaną w kodzie zdarzenia Click przycisku btnGetAuthors, a następnie uruchom ją za pomocą obiektu SqlDataAdapter. Należy utworzyć parametry procedury przechowywanej i dołączyć je do kolekcji Parameters obiektu SqlDataAdapter.

    Dodaj poniższy kod po zdarzeniu Page_Load (zdarzeniu ładowania strony):
    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
    
        'Utworzenie połączenia z programem SQL Server.
        MyConnection = New SqlConnection("server=(local);database=pubs;Trusted_Connection=yes")
    
        'Utworzenie obiektu DataAdapter, a następnie wprowadzenie nazwy procedury przechowywanej.
        MyDataAdapter = New SqlDataAdapter("GetAuthorsByLastName", MyConnection)
    
        'Ustawienie typu polecenia jako StoredProcedure.
        MyDataAdapter.SelectCommand.CommandType = CommandType.StoredProcedure
    
        'Utworzenie i dodanie parametru do kolekcji Parameters dotyczącej procedury przechowywanej.
        MyDataAdapter.SelectCommand.Parameters.Add(New SqlParameter("@au_lname", _
       SqlDbType.VarChar, 40))
    
        'Przypisanie wartości wyszukiwania do parametru.
        MyDataAdapter.SelectCommand.Parameters("@au_lname").Value = Trim(txtLastName.Text)
    
        'Utworzenie i dodanie parametru wyjściowego do kolekcji Parameters. 
        MyDataAdapter.SelectCommand.Parameters.Add(New SqlParameter("@RowCount", _
        SqlDbType.Int, 4))
    
        'Ustawienie kierunku parametru. Ten parametr zawiera zwrócone wiersze.
        MyDataAdapter.SelectCommand.Parameters("@RowCount").Direction = ParameterDirection.Output
    
        DS = New DataSet() 'Utworzenie nowego obiektu DataSet przechowującego rekordy.
        MyDataAdapter.Fill(DS, "AuthorsByLastName") 'Wypełnienie obiektu DataSet zwróconymi wierszami.
    
        'Pobranie liczby zwróconych wierszy, a następnie przypisanie jej do formantu Label.
        'lblRowCount.Text = "Liczba znalezionych wierszy:" & DS.Tables(0).Rows.Count().ToString()
        lblRowCount.Text = "Liczba znalezionych wierszy:" & MyDataAdapter.SelectCommand.Parameters(1).Value
    
        'Ustawienie źródła danych formantu DataGrid jako obiektu DataSet przechowującego wiersze.
        Grdauthors.DataSource = DS.Tables("AuthorsByLastName").DefaultView
    
        'Powiązanie obiektu DataSet z formantem DataGrid. 
        'UWAGA: jeśli ta metoda nie zostanie wywołana, formant DataGrid nie będzie wyświetlany!
        Grdauthors.DataBind()
    
        MyDataAdapter.Dispose() 'Usunięcie obiektu DataAdapter.
        MyConnection.Close() 'Zamknięcie połączenia.
    End Sub
    					
  5. W oknie Solution Explorer kliknij prawym przyciskiem myszy stronę .aspx, a następnie kliknij polecenie Set as Start Page.
  6. Zapisz projekt, a następnie kliknij przycisk Start w programie Visual Studio .NET. Zauważ, że projekt został skompilowany i została wyświetlona strona domyślna.
  7. Wpisz nazwisko autora w polu tekstowym, a następnie kliknij przycisk Pobierz autorów. Zostanie wywołana procedura przechowywana zwracająca wiersze, które wypełnią formant DataGrid.

    Można wprowadzić ciągi wyszukiwania programu SQL Server, takie jak G%, zwracające wszystkich autorów, których nazwisko rozpoczyna się na literę „G”.

Rozwiązywanie problemów

  • Jeśli nie można połączyć się z bazą danych, należy sprawdzić, czy ciąg połączenia ConnectionString wskazuje prawidłowy serwer z programem SQL Server.
  • Jeśli można się połączyć z bazą danych, ale występują problemy przy próbie utworzenia procedury przechowywanej, należy się upewnić, że posiadane uprawnienia umożliwiają tworzenie procedur przechowywanych w bazie danych, z którą jest nawiązywane połączenie.

Materiały referencyjne

Aby uzyskać więcej informacji na ten temat, zobacz następujące tematy w dokumentacji zestawu SDK dla systemu Microsoft .NET Framework:
ADO.NET — omówienie
http://msdn.microsoft.com/pl-pl/library/h43ks021.aspx

Zestaw DataSet środowiska ADO.NET
http://msdn.microsoft.com/pl-pl/library/zb0sdh0b(VS.71).aspx

Korzystanie z dostawców danych systemu .NET w celu uzyskania dostępu do danych
http://msdn.microsoft.com/pl-pl/library/s7ee2dwt(vs.71).aspx
Więcej informacji ogólnych o technologiach ADO.NET i Visual Basic .NET można znaleźć w następujących grupach dyskusyjnych witryny MSDN:
microsoft.public.dotnet.framework.adonet

microsoft.public.dotnet.languages.vb
Więcej informacji można znaleźć w następującej publikacji:
R. Allen Wyke, Sultan Rehman i Brad Leupen, XML Programming (Core Reference) (Programowanie XML, informacje na temat kodu), Microsoft Press, 2001.
Aby uzyskać więcej informacji, zobacz następujący kurs w witrynie Szkolenia i certyfikacje firmy Microsoft:
2389 Programming with ADO.NET
Aby uzyskać dodatkowe informacje o sposobie wykonywania tego zadania przy użyciu stron Microsoft Active Server Pages, kliknij numer artykułu poniżej w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:
300488 Jak uruchomić procedury składowane SQL ze strony ASP (strona może być w języku angielskim)

Właściwości

Numer ID artykułu: 306574 - Ostatnia weryfikacja: 24 października 2012 - Weryfikacja: 7.0
Informacje zawarte w tym artykule dotyczą:
  • 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
Słowa kluczowe: 
kbhowtomaster kbsqlclient kbsystemdata KB306574

Przekaż opinię

 

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