Jak pobrać schemat kolumn za pomocą metody GetSchemaTable obiektu DataReaderMethod i programu Visual C# .NET

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

Na tej stronie

Streszczenie

W tym artykule przedstawiono, jak za pomocą metody GetSchemaTable obiektu DataReader w technologii ADO.NET można pobrać informacje o schemacie kolumny. Schemat kolumny, czyli tak zwane właściwości pól, zawiera następujące informacje:
  • nazwa;
  • typ danych;
  • rozmiar;
  • określenie, czy pola danej kolumny stanowią klucz podstawowy;
  • określenie, czy pola danej kolumny są automatycznie numerowane (typ AutoIncrement).
Metoda GetSchemaTable zwraca właściwość DataTable, zawierającą schemat kolumn dla obiektu DataReader. Właściwość ta zawiera po jednym wierszu dla każdego pola z zestawu wynikowego. Każda kolumna (schematu kolumn określanego przez właściwość DataTable) odpowiada właściwości pola z zestawu wynikowego. Właściwość ColumnName kolumny DataTable zawiera nazwę właściwości danego pola, np. właściwości ColumnName, DataType, ColumnSize, IsKeyColumn lub IsAutoIncrement. Wartość kolumny DataTable jest wartością właściwości danego pola, np. wartością FirstName właściwości ColumnName.

Metody GetSchemaTable można używać zarówno z dostawcą bazy danych OLE platformy .NET, jak i dostawcą bazy danych SQL platformy .NET. Metoda OleDbDataReader.GetSchemaTable odpowiada metodzie IColumnsRowset::GetColumnsRowset dostawcy bazy danych OLE. Metoda SqlDataReader.GetSchemaTable nie korzysta z warstwy dostawcy bazy danych OLE.

Godny uwagi jest fakt, że obiekt DataReader nie zwróci schematu kolumny, dopóki nie nastąpi jawne wywołanie metody GetSchemaTable. Należy również pamiętać, że pobierając schemat kolumny za pomocą metody GetSchemaTable, nie można aktualizować obiektu DataReader. Obiekt DataReader zawsze pobiera z bazy danych progresywny strumień danych, przeznaczony tylko do odczytu.

Kiedy należy korzystać z metody GetSchemaTable

  • Metoda obiektu SqlConnection obsługuje pobieranie informacji o schemacie z programu SQL Server inaczej niż analogiczna metoda GetOleDbSchemaTable obiektu OleDbConnection. W metodzie GetSchemaTable klasy SqlDataReader informacje o schemacie kolumny można uzyskać bezpośrednio z programu SQL Server.
  • Metoda GetOleDbSchemaTable obiektu OleDbConnection umożliwia zwrócenie informacji o schemacie bazy danych, tabeli i kolumny. Jednak w wypadku pobierania tylko informacji o schemacie kolumny prostsza w użyciu jest metoda GetSchemaTable obiektu DataReader.
  • Podczas dostosowywania nazw kolumn oraz ich pozostałych atrybutów metoda GetSchemaTable służy do tworzenia nowej właściwości DataTable na podstawie istniejącego schematu właściwości DataTable. Przykładowy kod definiujący nową tabelę za pomocą metody GetSchemaTable znajduje się w sekcji „Visual Studio Samples: Fitch and Mather 7.0 Run SQL Query” Pomocy online dla programu Microsoft Visual Studio .NET.

Pobieranie schematu kolumny za pomocą dostawcy bazy danych OLE platformy .NET

W poniższym przykładzie wyświetlane są informacje o schemacie kolumn (właściwościach pól) pobrane z tabeli Employees bazy danych Northwind programu SQL Server.

Zauważ, że po wybraniu dostawcy OLE DB .NET używana jest metoda GetSchemaTable obiektu OleDbDataReader.
  1. Uruchom program Visual Studio .NET i utwórz nowy projekt Visual C# Console Application. Domyślnie utworzona zostanie klasa Class1.cs.
  2. Otwórz okno Code dla klasy Class1. U góry tego okna, powyżej deklaracji namespace, wklej następujący kod:
    using System.Data;
    using System.Data.OleDb;
  3. W tym samym oknie w funkcji Main wklej następujący kod:
    OleDbConnection cn = new OleDbConnection();
    OleDbCommand cmd = new OleDbCommand();
    DataTable schemaTable; 
    OleDbDataReader myReader; 
    			 
    //Nawiąż połączenie z bazą danych Northwind programu SQL Server.
    cn.ConnectionString = "Provider=SQLOLEDB;Data Source=serwer;User ID=id_użytkownika;
                           Password=hasło;Initial Catalog=Northwind";
    cn.Open();
    
    //Pobierz rekordy z tabeli Employees i wstaw je do obiektu DataReader.
    cmd.Connection = cn;
    cmd.CommandText = "SELECT * FROM Employees";
    myReader = cmd.ExecuteReader();
    
    //Pobierz schemat kolumny i wstaw go do tabeli DataTable.
    schemaTable = myReader.GetSchemaTable();
    
    //Dla każdego pola w tabeli...
    foreach (DataRow myField in schemaTable.Rows){
        //Dla każdej właściwości pola...
        foreach (DataColumn myProperty in schemaTable.Columns) {
    	//Wyświetl nazwę i wartość pola.
    	Console.WriteLine(myProperty.ColumnName + " = " + myField[myProperty].ToString());
        }
        Console.WriteLine();
    
        //Wstrzymaj wyświetlanie.
        Console.ReadLine();
    }
    
    //Zawsze zamykaj obiekt DataReader i połączenie.
    myReader.Close();
    cn.Close();
  4. Zmodyfikuj odpowiednie parametry właściwości ConnectionString, aby nawiązać połączenie z programem SQL Server.
  5. Naciśnij klawisz F5, aby skompilować i uruchomić projekt. W oknie konsoli zostaną wyświetlone właściwości wszystkich pól.
  6. Naciśnij klawisz ENTER, aby przewinąć listę, zamknąć aplikację konsoli i powrócić do zintegrowanego środowiska programowania (IDE).

Pobieranie schematu kolumny za pomocą dostawcy bazy danych SQL platformy .NET

W poniższym przykładzie wyświetlane są informacje o schemacie kolumn (właściwościach pól) pobrane z tabeli Employees bazy danych Northwind programu SQL Server.

Zauważ, że po wybraniu dostawcy bazy danych SQL platformy .NET używana jest metoda GetSchemaTable obiektu SqlDataReader.
  1. Uruchom program Visual Studio .NET i utwórz nowy projekt Visual C# Console Application. Domyślnie utworzona zostanie klasa Class1.cs.
  2. Otwórz okno Code dla klasy Class1. U góry tego okna, powyżej deklaracji namespace, wklej następujący kod:
    using System.Data;
    using System.Data.SqlClient;
  3. W tym samym oknie w funkcji Main wklej następujący kod:
    SqlConnection cn = new SqlConnection();
    SqlCommand cmd = new SqlCommand();
    DataTable schemaTable; 
    SqlDataReader myReader; 
    			 
    //Nawiąż połączenie z bazą danych Northwind programu SQL Server.
    cn.ConnectionString = "Data Source=serwer;User ID=id_użytkownika;
                           Password=hasło;Initial Catalog=Northwind";
    cn.Open();
    
    //Pobierz rekordy z tabeli Employees i wstaw je do obiektu DataReader.
    cmd.Connection = cn;
    cmd.CommandText = "SELECT * FROM Employees";
    myReader = cmd.ExecuteReader();
    
    //Pobierz schemat kolumny i wstaw go do tabeli DataTable.
    schemaTable = myReader.GetSchemaTable();
    
    //Dla każdego pola w tabeli...
    foreach (DataRow myField in schemaTable.Rows){
        //Dla każdej właściwości pola...
        foreach (DataColumn myProperty in schemaTable.Columns) {
    	//Wyświetl nazwę i wartość pola.
    	Console.WriteLine(myProperty.ColumnName + " = " + myField[myProperty].ToString());
        }
        Console.WriteLine();
    
        //Wstrzymaj wyświetlanie.
        Console.ReadLine();
    }
    
    //Zawsze zamykaj obiekt DataReader i połączenie.
    myReader.Close();
    cn.Close();
  4. Zmodyfikuj odpowiednie parametry właściwości ConnectionString, aby nawiązać połączenie z programem SQL Server.
  5. Naciśnij klawisz F5, aby skompilować i uruchomić projekt. W oknie konsoli zostaną wyświetlone właściwości wszystkich pól.
  6. Naciśnij klawisz ENTER, aby przewinąć listę, zamknąć aplikację konsoli i powrócić do zintegrowanego środowiska programowania (IDE).

Materiały referencyjne

Więcej informacji dotyczących obiektu DataReader i metody GetSchemaTable moźna znaleźć w następujących tematach Pomocy online dla programu Visual Studio .NET:
  • The ADO.NET DataReader
  • IDataReader.GetSchemaTable Method
  • OleDbDataReader.GetSchemaTable Method
  • SqlDataReader.GetSchemaTable Method
UWAGA: W temacie „IDataReader.GetSchemaTable Method” zwrócona tabela DataTable zawiera pełną listę kolumn.

Aby uzyskać dodatkowe informacje dotyczące metody GetOleDbSchemaTable obiektu OleDbConnection służącej do pobierania informacji o schemacie, kliknij numer artykułu poniżej w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:
309681 HOW TO: Retrieve Schema Information by Using GetOleDbSchemaTable and Visual C# .NET

Właściwości

Numer ID artykułu: 310107 - 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 KB310107

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