Jak wywoływać sparametryzowane procedury przechowywane SQL za pomocą dostawcy ODBC .NET i programu Visual C# .NET

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

Na tej stronie

Streszczenie

W tym artykule krok po kroku opisano sposób wywoływania sparametryzowanej procedury przechowywanej programu SQL Server za pomocą dostawcy ODBC .NET Managed Provider i programu Visual C# .NET.

Wywoływanie sparametryzowanej procedury przechowywanej za pomocą dostawcy ODBC .NET odbywa się nieco inaczej niż wywoływanie tej samej procedury za pomocą dostawców baz danych SQL lub OLE, a zasadnicza różnica polega na zastąpieniu nazwy procedury przechowywanej składnią polecenia CALL dostawcy ODBC. Aby uzyskać dodatkowe informacje dotyczące składni polecenia CALL, zobacz temat „Procedure Calls” w dokumentacji ODBC Programmer's Reference w bibliotece MSDN Library.

Przykłady składni polecenia Call

  1. Jest to przykład składni polecenia call, umożliwiającego wywołanie procedury przechowywanej aktualnie w przykładowej bazie danych Northwind i wymagającej wprowadzenia jednego parametru wejściowego:
    {CALL CustOrderHist (?)}
  2. Jest to przykład składni polecenia call, umożliwiającej wywołanie procedury przechowywanej wymagającej wprowadzenia jednego parametru wejściowego i zwracającej w wyniku jeden parametr wyjściowy oraz wartość. Pierwszy symbol zastępczy oznacza zwróconą wartość:
    {? = CALL Procedure1 (?, ?)
  3. O kolejności przetwarzania parametrów przez dostawcę ODBC .NET Managed Provider, na przykład dostawcę bazy danych OLE, decyduje ich liczba porządkowa (rozpoczynająca się zerem), a nie ich nazwa.

Projekt testowy — jeden parametr wejściowy

  1. Jeżeli dostawca ODBC .NET Managed Provider nie został jeszcze pobrany i zainstalowany, pobierz ten program z następującej witryny firmy Microsoft w sieci Web, a następnie zainstaluj:
    http://www.microsoft.com/data
  2. Uruchom program Visual Studio .NET i utwórz nowy projekt Visual C# .NET Windows Application, nadając mu dowolną nazwę.
  3. W menu Project kliknij polecenie Add reference, a następnie kliknij dwukrotnie moduł Microsoft.Data.ODBC.dll, aby dodać go do listy wybranych elementów. Zamknij okno dialogowe References.
  4. Na samej górze okna kodu dodaj następujące instrukcje:
    using System.Data;
    using Microsoft.Data.Odbc;
  5. Dodaj do formularza domyślnego przycisk z przybornika.
  6. Kliknij dwukrotnie przycisk polecenia, aby przełączyć się na okno kodu zawierające kod obsługi zdarzenia Click dla danego przycisku. W procedurze obsługi zdarzenia Click wprowadź lub wklej poniższy kod, modyfikując w razie potrzeby ciąg połączenia programu SQL Server:
    OdbcConnection cn;
    OdbcCommand cmd;
    OdbcParameter prm;
    OdbcDataReader dr;
    
    try {
        //Zmień ciąg połączenia na ciąg właściwy dla używanego programu SQL Server.
        cn = new OdbcConnection("Driver={SQL Server};Server=nazwa_serwera;Database=Northwind;Trusted_Connection=Yes");
    
        //Użyj składni ODBC polecenia call.
        cmd = new OdbcCommand("{call CustOrderHist (?)}", cn);
    
        prm = cmd.Parameters.Add("@CustomerID", OdbcType.Char, 5);
        prm.Value = "ALFKI";
    
        cn.Open();
    
        dr = cmd.ExecuteReader();
    
        //Wyświetl każdy wynik.
        while (dr.Read()) 
    	Console.WriteLine(dr.GetString(0));
    
        //Posprzątaj.
        dr.Close();
        cn.Close();
    }
    catch (OdbcException o) {
        MessageBox.Show(o.Message.ToString());
    }
  7. Uruchom projekt. Powyższy kod wywołuje procedurę przechowywaną „CustOrderHist”, przekazując wartość CustomerID w parametrze wejściowym, a następnie zwraca zestaw wyników. W oknie Output powinna się znajdować lista produktów zamówionych przez klienta „ALFKI” z bazy danych Northwind.

    UWAGA: Aby otworzyć okno Output, naciśnij klawisze CTRL+ALT+O.

Projekt testowy — wiele typów parametrów

  1. Za pomocą narzędzia Query Analyzer utwórz w przykładowej bazie danych Northwind poniższą procedurę przechowywaną. Parametrem wejściowym tej procedury przechowywanej jest wartość pola CustomerID, natomiast zwracana jest lista zamówień złożonych przez klienta. Procedura zwraca jako parametr wyjściowy średni kosztu przewozu towaru, a jej wartością zwracaną jest liczba zamówień złożonych przez klienta.
    CREATE PROCEDURE usp_TestParameters
    @CustID CHAR(5),
    @AvgFreight MONEY OUTPUT
    AS
    SELECT @AvgFreight = AVG(Freight) FROM Orders WHERE CustomerID = @CustID
    SELECT * FROM Orders WHERE CustomerID = @CustID
    RETURN @@ROWCOUNT
  2. Powtórz kroki od 1 do 6, zastępując poniższy kod w procedurze obsługi zdarzenia Click dla przycisku polecenia:
    OdbcConnection cn;
    
    try {
        cn = new OdbcConnection("Driver={SQL Server};Server=nazwa_serwera;Database=Northwind;Trusted_Connection=Yes");
    
        OdbcCommand cmd = new OdbcCommand("{? = call usp_TestParameters (?, ?)}", cn);
    
        OdbcParameter prm = cmd.Parameters.Add("@RETURN_VALUE", OdbcType.Int);
        prm.Direction = ParameterDirection.ReturnValue;
    
        prm = cmd.Parameters.Add("@CustomerID", OdbcType.Char, 5);
        prm.Value = "ALFKI";
    
        prm = cmd.Parameters.Add("@AvgFreight", OdbcType.Double);
        prm.Direction = ParameterDirection.Output;
    
        cn.Open();
        OdbcDataReader dr = cmd.ExecuteReader();
    
        while (dr.Read())
             Console.WriteLine(dr.GetString(0));
    
        dr.Close();
        cn.Close();
    
        Console.WriteLine("Średni koszt przewozu towaru (parametr wyjściowy): {0}", cmd.Parameters[2].Value);
        Console.WriteLine("Liczba zamówień (wartość zwrócona): {0}", cmd.Parameters[0].Value);
    
    }
    
    catch (OdbcException o) {
        MessageBox.Show(o.Message.ToString());
    }
  3. Uruchom projekt. Powyższy kod wywołuje procedurę przechowywaną „usp_TestParameters” utworzoną w kroku 1, przekazując wartość CustomerID w parametrze wejściowym. Zwraca zestaw wyników, parametr wyjściowy oraz wartość. W oknie Output powinny znajdować się lista zamówień złożonych przez klienta „ALFKI” z bazy Northwind, średnia wartość kosztu przewozu opłacanego przez klienta przy danym zamówieniu oraz liczba zamówień.

    UWAGA: Aby otworzyć okno Output, naciśnij klawisze CTRL+ALT+O.

Rozwiązywanie problemów

  • Dostawca ODBC .NET Managed Provider nie może korzystać ze składni obiektów ADO stosowanej zwykle do wywoływania procedur przechowywanych, w której jako tekst polecenia CommandText wprowadzana jest tylko nazwa procedury.
  • Parametry wyjściowe i wartość zwrócona są dostępne dopiero po zamknięciu zwróconego przez procedurę przechowywaną zestawu wyników. Gdybyśmy na przykład pominęli wiersz „dr.Close()” w drugim z powyższych przykładów, nie moglibyśmy pobrać wartości parametru wyjściowego i wartości zwróconej.
  • O kolejności przetwarzania parametrów przez dostawcę ODBC .NET Managed Provider, na przykład dostawcę bazy danych OLE, decyduje ich liczba porządkowa (rozpoczynająca się zerem), a nie ich nazwa.
  • Dostawca ODBC .NET Managed Provider nie jest dostarczany z programem Visual Studio .NET i musi zostać pobrany oddzielnie.

Materiały referencyjne

Aby uzyskać dodatkowe informacje dotyczące składni ODBC polecenia CALL, zobacz temat „Procedure Calls” w dokumentacji ODBC Programmer's Reference w bibliotece MSDN Library.

Właściwości

Numer ID artykułu: 310130 - Ostatnia weryfikacja: 9 kwietnia 2003 - Weryfikacja: 2.0
Informacje zawarte w tym artykule dotyczą:
  • Microsoft ADO .NET (technologia należąca do architektury .NET Framework)
  • Microsoft Visual C# .NET 2002 Standard Edition
Słowa kluczowe: 
kbhowto kbhowtomaster kbdatabase KB310130

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