FillSchema 方法使用 SelectCommand 从数据源中检索架构。与 SelectCommand 关联的连接对象必须有效,但不需要将其打开。如果调用 FillSchema 之前连接已关闭,则将其打开以检索数据,然后再将其关闭。如果调用 FillSchema 之前连接已打开,它将保持打开状态。FillSchema 操作将 DataTable 添加到目标 DataSet 中。然后,它向 DataTable 的 DataColumnCollection 中添加列,并且当数据源中存在以下 DataColumn 属性时配置这些属性: AllowDBNull 
AutoIncrement。您必须分别设置 AutoIncrementStep 和 AutoIncrementSeed。 
MaxLength 
ReadOnly 
Unique 
FillSchema 还根据以下规则配置 PrimaryKey 和 Constraints 属性: 如果 SelectCommand 返回一个或多个主键列,则它们被用作 DataTable 的主键列。 
如果未返回任何主键列,但返回了唯一列,则当且仅当所有唯一列都不可为空时,唯一列用作主键。如果任何一列都可以为空,则将 UniqueConstraint 添加到 ConstraintCollection 中,但不设置 PrimaryKey 属性。 
如果既返回了主键列又返回了唯一列,则主键列用作 DataTable 的主键列。 
请注意,主键和唯一约束按照上述规则添加到 ConstraintCollection 中,但不添加其他约束类型。如果 DataAdapter 在填充 DataTable 时遇到重复列,它将以“columnname1”、“columnname2”、“columnname3”这种模式命名后面的列。如果传入数据包含未命名的列,它们将按“Column1”、“Column2”的模式放在 DataSet 中。向 DataSet 添加多个结果集时,每个结果集都放在一个单独的表中。将整数值追加到指定的表名(例如“Table”、“Table1”、“Table2”等)从而对附加结果集进行命名。在应用程序中使用列名和表名时应小心,一定不要与这些命名模式发生冲突。