DataTableReader.GetSchemaTable 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
返回一个 DataTable,它描述 DataTableReader 的列元数据。
public:
override System::Data::DataTable ^ GetSchemaTable();
public override System.Data.DataTable GetSchemaTable ();
override this.GetSchemaTable : unit -> System.Data.DataTable
Public Overrides Function GetSchemaTable () As DataTable
返回
一个描述列元数据的 DataTable。
例外
示例
以下控制台应用程序示例检索有关指定列的架构信息。 传递 DisplaySchemaTableInfo
过程 a DataTableReader 和一个表示 列在 中的序号位置的 DataTableReader
整数,过程会将架构信息输出到控制台窗口。
private static void TestGetSchemaTable()
{
// Set up the data adapter, using information from
// the AdventureWorks sample database.
// Modify the SQL expression to retrieve
// data from a different table.
SqlDataAdapter adapter =
SetupDataAdapter("SELECT * FROM Sales.Customer");
// Fill the DataTable, retrieving all the schema information.
adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;
DataTable table = new DataTable();
adapter.Fill(table);
// Create the DataTableReader, and close it when done.
using (DataTableReader reader = new DataTableReader(table))
{
// Modify the column number to display information
// about a column other than column 0.
DisplaySchemaTableInfo(reader, 0);
}
Console.WriteLine();
Console.WriteLine("Press Enter to finish.");
Console.ReadLine();
}
private static void DisplaySchemaTableInfo(
DataTableReader reader, int ordinal)
{
// Given a DataTableReader, display schema
// information about a particular column.
try
{
DataTable schemaTable = reader.GetSchemaTable();
DataRow row = schemaTable.Rows[ordinal];
foreach (DataColumn col in schemaTable.Columns)
{
Console.WriteLine("{0}: {1}",
col.ColumnName, row[col.Ordinal]);
}
}
catch (IndexOutOfRangeException ex)
{
Console.WriteLine("{0} is an invalid column number.",
ordinal);
}
}
private static SqlDataAdapter SetupDataAdapter(String sqlString)
{
// Assuming all the default settings, create a
// SqlDataAdapter working with the AdventureWorks
// sample database that's available with
// SQL Server.
String connectionString =
"Data source=(local);initial catalog=AdventureWorks;" +
"Integrated Security=True";
return new SqlDataAdapter(sqlString, connectionString);
}
Private Sub TestGetSchemaTable()
' Set up the data adapter, using information from
' the AdventureWorks sample database.
' Modify the SQL expression to retrieve
' data from a different table.
Dim adapter As SqlDataAdapter = _
SetupDataAdapter("SELECT * FROM Sales.Customer")
' Fill the DataTable, retrieving all the schema information.
adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey
Dim table As New DataTable
adapter.Fill(table)
' Create the DataTableReader, and close it when done.
Using reader As New DataTableReader(table)
' Modify the column number to display information
' about a column other than column 0.
DisplaySchemaTableInfo(reader, 0)
End Using
Console.WriteLine()
Console.WriteLine("Press Enter to finish.")
Console.ReadLine()
End Sub
Private Sub DisplaySchemaTableInfo( _
ByVal reader As DataTableReader, ByVal ordinal As Integer)
' Given a DataTableReader, display schema
' information about a particular column.
Try
Dim schemaTable As DataTable = reader.GetSchemaTable()
Dim row As DataRow = schemaTable.Rows(ordinal)
For Each col As DataColumn In schemaTable.Columns
Console.WriteLine("{0}: {1}", _
col.ColumnName, row(col.Ordinal))
Next
Catch ex As IndexOutOfRangeException
Console.WriteLine("{0} is an invalid column number.", _
ordinal)
End Try
End Sub
Private Function SetupDataAdapter( _
ByVal sqlString As String) As SqlDataAdapter
' Assuming all the default settings, create a SqlDataAdapter
' working with the AdventureWorks sample database that's
' available with SQL Server.
Dim connectionString As String = _
"Data Source=(local);" & _
"Initial Catalog=AdventureWorks;" & _
"Integrated Security=true"
Return New SqlDataAdapter(sqlString, connectionString)
End Function
注解
GetSchemaTable 方法按以下顺序返回有关每个列的元数据:
DataReader 列 | 说明 |
---|---|
ColumnName | 列在 中显示的 DataTable名称。 |
ColumnOrdinal | 列的序号 |
ColumnSize | 如果 ColumnSize 无法确定 或不相关的 (或 MaxLength) 属性 DataColumn ,则为 -1;否则为 0 或包含 MaxLength 值的正整数。 |
NumericPrecision | 如果列类型是数值类型,则这是列的最大精度。 如果列类型不是数值数据类型,则此值为 null 值。 |
NumericScale | 如果列数据类型具有刻度分量,则返回小数点右侧的位数。 否则,返回 null 值。 |
数据类型 | 列的基础类型。 |
ProviderType | 列的数据类型的指示符。 如果列的数据类型因行而异,则此值为 Object。 此列不能包含 NULL 值。 |
IsLong | true 如果列的数据类型为 String ,并且其 MaxLength 属性为 -1,则为 。 否则为 false 。 |
AllowDBNull | true 如果列的 AllowDbNull 约束设置为 true,则为 ;否则为 false 。 |
IsReadOnly | true 如果无法修改列,则为 ;否则为 false 。 |
IsRowVersion | false ,对于每一列。 |
IsUnique | true :此列中没有两行 DataTable 可以具有相同的值。 IsUnique 如果列本身表示键,或者存在仅适用于此列的 UNIQUE 类型的约束,则保证为 true。 false :列可以包含 中的 DataTable 重复值。 此列的默认值为 false 。 |
IsKey | true :列是一组列之一,这些列组合起来唯一标识 中的 DataTable行。 设置为 IsKey true 的列集必须唯一标识 中的 DataTable 行。 不要求这组列是最小组列。 这组列可以从主键、唯一 DataTable 约束或唯一索引生成。 false :不需要列来唯一标识行。 如果列参与单个主键或复合主键,则此值为 true 。 否则,其值为 false 。 |
IsAutoIncrement | true :列以固定增量向新行赋值。 false :该列不以固定增量向新行赋值。 此列的默认值为 false 。 |
BaseCatalogName | 包含该列的数据存储区中的目录的名称。 Null 如果无法确定基本目录名称,则为 。 此列的默认值为 值 null 。 |
BaseSchemaName | 此值始终为 Null 。 |
BaseTableName | DataTable 的名称。 |
BaseColumnName | 中 DataTable列的名称。 |
AutoIncrementSeed | 的 AutoIncrementSeed 属性的值DataTable。 |
AutoIncrementStep | 的 AutoIncrementStep 属性的值DataTable。 |
DefaultValue | 的 DefaultValue 属性的值DataColumn。 |
Expression | 如果当前列是表达式列并且表达式中使用的所有列都属于包含表达式列的相同 T:System.Data.DataTable 列,则为表达式字符串;否则为 null 。 |
ColumnMapping | 与 MappingTypeDataColumn关联的值。 类型可以是 、Element 、 Hidden 或 SimpleContent 之Attribute 一。 默认值是 Element 。 |
BaseTableNamespace | 的 Namespace 属性的值DataTable。 |
BaseColumnNamespace | 的 Namespace 属性的值DataColumn。 |