如何擷取資料行結構描述,使用 DataReader GetSchemaTable 方法和視覺化 C#。NET

文章翻譯 文章翻譯
文章編號: 310107 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

在此頁中

結論

本文將示範如何使用 ado DataReader物件的GetSchemaTable方法。NET 中擷取資料行的結構描述資訊。另一個資料行的結構描述名稱是其欄位屬性。資料行的結構描述資訊包含資料行的下列資訊:
  • 名稱
  • 資料型別
  • 大小
  • 資料行是否是主索引鍵欄位
  • 資料行是否是 [自動編號] (自動增量)欄位
GetSchemaTable方法會傳回包含DataReader的資料行結構描述的資料表屬性。資料表包含每個欄位中的結果集的一個資料列。每個資料行對應至結果集欄位的屬性。資料表資料行的ColumnName屬性是屬性的欄位,例如ColumnName資料型別ColumnSizeIsKeyColumnIsAutoIncrement屬性的名稱。資料表資料行的值是屬性的欄位,例如名字] 欄位值的ColumnName屬性的值。
附註若要取得主索引鍵資訊,包括是否為一個欄位主索引鍵的一部份,以及它是否自動累加欄位,您就必須設定DataReaderCommandBehavior值為CommandBehavior.KeyInfo

您可以使用GetSchemaTable方法以其中一個 OLE DB。NET 提供者或 SQL。NET提供者。OleDbDataReader.GetSchemaTable方法會將對應至 OLE DB IColumnsRowset::GetColumnsRowset方法。SqlDataReader.GetSchemaTable方法並不會使用 OLE DB 提供者層。

附註,除非您明確地使用GetSchemaTable方法,否則DataReader才會傳回資料行結構描述。此外,如果您使用GetSchemaTable來擷取資料行結構描述時,您無法更新DataReaderDataReader固定會擷取資料的唯讀、 順向的資料流資料庫。

若要使用 GetSchemaTable 方法的時機

  • SqlConnection物件不支援擷取 SQL Server 結構描述資訊在類似於OleDbConnection物件的GetOleDbSchemaTable方法的方法。類別的GetSchemaTable方法提供最直接的方式來取得資料行結構描述從 SQL Server 的資訊。
  • 雖然OleDbConnection物件的GetOleDbSchemaTable方法會傳回資料庫、 資料表和資料行的結構描述資訊,您會發現DataReader物件的GetSchemaTable方法會更容易使用,如果您想要擷取只有資料行結構描述資訊。
  • 您可以使用GetSchemaTable方法來建立新資料表時您自訂的資料行名稱和其他依據現有資料表屬性之結構描述資料行屬性。如範例程式碼會示範如何使用GetSchemaTable來定義新的資料表,請參閱 「 Visual Studio 範例: Fitch和 Mather 7.0 執行 SQL 查詢"Microsoft Visual Studio 中的主題。NET 線上說明文件。

擷取以 OLE DB 的資料行結構描述。NET 提供者

這個範例會列出的資料行 (欄位的結構描述資訊屬性) 的 SQL Server 北風的 [員工] 資料表資料庫。

請注意,當您使用 OLE DB。NET 提供者使用OleDbDataReader物件的GetSchemaTable方法。
  1. 啟動 Visual Studio。NET,並建立新 Visual C#主控台應用程式專案。Class1.cs 會建立根據預設值。
  2. 開啟 Class1 的程式碼] 視窗。貼上下列程式碼在命名空間宣告上方的 [程式碼] 視窗的頂端:
    using System.Data;
    using System.Data.OleDb;
    					
  3. 在 [程式碼] 視窗中貼上下列程式碼,在Main函式:
    OleDbConnection cn = new OleDbConnection();
    OleDbCommand cmd = new OleDbCommand();
    DataTable schemaTable; 
    OleDbDataReader myReader; 
    			 
    //Open a connection to the SQL Server Northwind database.
    cn.ConnectionString = "Provider=SQLOLEDB;Data Source=server;User ID=login;
                           Password=password;Initial Catalog=Northwind";
    cn.Open();
    
    //Retrieve records from the Employees table into a DataReader.
    cmd.Connection = cn;
    cmd.CommandText = "SELECT * FROM Employees";
    myReader = cmd.ExecuteReader(CommandBehavior.KeyInfo); 
    
    //Retrieve column schema into a DataTable.
    schemaTable = myReader.GetSchemaTable();
    
    //For each field in the table...
    foreach (DataRow myField in schemaTable.Rows){
        //For each property of the field...
        foreach (DataColumn myProperty in schemaTable.Columns) {
    	//Display the field name and value.
    	Console.WriteLine(myProperty.ColumnName + " = " + myField[myProperty].ToString());
        }
        Console.WriteLine();
    
        //Pause.
        Console.ReadLine();
    }
    
    //Always close the DataReader and connection.
    myReader.Close();
    cn.Close();
    					
  4. 修改連接字串屬性,以便正確地連線到您的 SQL Server 的參數電腦。
  5. 按下 F5 鍵以編譯並執行專案。請注意每個欄位的內容會列出 [主控台] 視窗中。
  6. 按 ENTER 鍵來捲動清單、 結束主控台應用程式,並傳回整合式開發環境(IDE)。

擷取具有 SQL 的資料行結構描述。NET 提供者

這個範例會列出的資料行 (欄位的結構描述資訊屬性) 的 SQL Server 北風的 [員工] 資料表資料庫。

請注意,當您使用 SQL。NET 提供者,您可以使用GetSchemaTable物件方法。
  1. 啟動 Visual Studio。NET,並建立新 Visual C#主控台應用程式專案。Class1.cs 會建立根據預設值。
  2. 開啟 Class1 的程式碼] 視窗。貼上下列程式碼在命名空間宣告上方的 [程式碼] 視窗的頂端:
    using System.Data;
    using System.Data.SqlClient;
    					
  3. 在 [程式碼] 視窗中貼上下列程式碼,在Main函式:
    SqlConnection cn = new SqlConnection();
    SqlCommand cmd = new SqlCommand();
    DataTable schemaTable; 
    SqlDataReader myReader; 
    			 
    //Open a connection to the SQL Server Northwind database.
    cn.ConnectionString = "Data Source=server;User ID=login;
                           Password=password;Initial Catalog=Northwind";
    cn.Open();
    
    //Retrieve records from the Employees table into a DataReader.
    cmd.Connection = cn;
    cmd.CommandText = "SELECT * FROM Employees";
    myReader = cmd.ExecuteReader(CommandBehavior.KeyInfo);
    
    //Retrieve column schema into a DataTable.
    schemaTable = myReader.GetSchemaTable();
    
    //For each field in the table...
    foreach (DataRow myField in schemaTable.Rows){
        //For each property of the field...
        foreach (DataColumn myProperty in schemaTable.Columns) {
    	//Display the field name and value.
    	Console.WriteLine(myProperty.ColumnName + " = " + myField[myProperty].ToString());
        }
        Console.WriteLine();
    
        //Pause.
        Console.ReadLine();
    }
    
    //Always close the DataReader and connection.
    myReader.Close();
    cn.Close();
    					
  4. 修改連接字串屬性,以便正確地連線到您的 SQL Server 的參數電腦。
  5. 按下 F5 以編譯並執行專案。請注意,每個欄位的屬性會列在 [主控台] 視窗中。
  6. 按 ENTER 鍵來捲動清單、 結束主控台應用程式,並返回 IDE。

?考

如需有關DataReaderGetSchemaTable方法的詳細資訊,請參閱 Visual Studio 中的下列主題。NET 線上說明] 文件:
擷取使用 DataReader 的資料

IDataReader.GetSchemaTable 方法

附註: 本主題包含完整的清單中的資料行傳回的資料表

OleDbDataReader.GetSchemaTable 方法

SqlDataReader.GetSchemaTable 方法
如需有關使用OleDbConnection物件的GetOleDbSchemaTable方法來擷取結構描述資訊的詳細資訊,請按一下文件編號下面,檢視 「 Microsoft 知識庫 」 中:
309681 如何使用 GetOleDbSchemaTable 和視覺化 C# 擷取結構描述資訊。NET

屬性

文章編號: 310107 - 上次校閱: 2012年6月12日 - 版次: 1.0
這篇文章中的資訊適用於:
  • Microsoft ADO.NET 1.1
  • Microsoft Visual C# .NET 2003 標準版
  • Microsoft Visual C# .NET 2002 Standard Edition
關鍵字:?
kbdatabase kbhowtomaster kbsqlclient kbsystemdata kbmt KB310107 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:310107
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

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