DbDataAdapter.FillSchema メソッド (DataTable, SchemaType)
指定した SchemaType に基いて、指定した DataTable のスキーマを設定します。
Overloads Public Function FillSchema( _
ByVal dataTable As DataTable, _ ByVal schemaType As SchemaType _) As DataTable
[C#]
public DataTable FillSchema(DataTabledataTable,SchemaTypeschemaType);
[C++]
public: DataTable* FillSchema(DataTable* dataTable,SchemaTypeschemaType);
[JScript]
public function FillSchema(
dataTable : DataTable,schemaType : SchemaType) : DataTable;
パラメータ
- dataTable
データ ソースから返されたスキーマを格納するための DataTable 。 - schemaType
SchemaType 値の 1 つ。
戻り値
データ ソースから返されたスキーマ情報が格納された DataTable 。
解説
FillSchema メソッドは、 SelectCommand を使用して、データ ソースからスキーマを取得します。 SelectCommand に関連付けられた接続オブジェクトは、有効なものでなければなりませんが、開いている必要はありません。 FillSchema を呼び出す前に接続が閉じていた場合は、接続が開かれ、データを取得した後で再び閉じられます。 FillSchema を呼び出す前に接続が開いていた場合は、接続は開いたままになります。
FillSchema は、 DataTable を返します。次に、 DataTable の DataColumnCollection に列を追加します。データ ソースに次の DataColumn プロパティが存在する場合は、それを設定します。
- AllowDBNull
- AutoIncrement (AutoIncrementStep および AutoIncrementSeed は個別に設定する必要があります)
- MaxLength
- ReadOnly
- Unique
また、 FillSchema は、次の規則に従って、 PrimaryKey プロパティと Constraints プロパティも設定します。
- DataTable の PrimaryKey が既に定義されているか、または DataTable にデータが格納されている場合は、 PrimaryKey プロパティを設定しません。
- SelectCommand によって 1 つ以上の主キー列が返された場合は、それを DataTable の主キー列として使用します。
- 主キー列が返されず、一意の列が返された場合、それらの列すべてが null 値を許容しないときに限り、一意の列を主キーとして使用します。いずれかの列が null 値を許容するときは、 ConstraintCollection に UniqueConstraint を追加します。 PrimaryKey プロパティは設定しません。
- 主キー列と一意の列の両方が返された場合は、主キー列を DataTable の主キー列として使用します。
主キーおよび UNIQUE 制約は上記の規則に従って ConstraintCollection に追加されますが、その他の種類の制約は追加されないことに注意してください。この処理では、サーバーに対する複数のラウンドトリップが必要になる場合があります。
DataTable へのデータの格納中に重複する列が見つかった場合、2 番目以降の列には、 DbDataAdapter によって、columnname1、columnname2、columnname3 のような形式で名前が生成されます。受信したデータに無名の列が含まれていた場合は、Column1、Column2 のような形式の名前で DataSet に列が格納されます。 DataSet に複数結果セットを追加するときは、各結果セットが個別のテーブルに格納されます。2 番目以降の結果セットには、指定されたテーブル名に整数値を追加した名前が付けられます。たとえば、Table、Table1、Table2 のようになります。アプリケーションで列名およびテーブル名を使用するときは、これらの形式の名前と衝突しないように注意する必要があります。
FillSchema は、行を返しません。 DataTable に行を追加するには、 Fill メソッドを使用します。
メモ 複数の結果を返すバッチ SQL ステートメントを処理する場合、.NET Framework Data Provider for OLE DB の FillSchema の実装では、最初の結果のスキーマ情報だけが取得されます。複数の結果のスキーマ情報を取得するには、 MissingSchemaAction を AddWithKey に設定して Fill を使用します。
FillSchema を使用する場合、.NET Framework Data Provider for SQL Server は、実行するステートメントに FOR BROWSE 句を追加します。SET FMTONLY ON ステートメントの使用による干渉などの副作用に注意してください。詳細については、SQL Server Books Online を参照してください。
使用例
[Visual Basic, C#, C++] SqlDataAdapter 派生クラスを使用して、 DataSet にスキーマを格納し、 DataTable オブジェクトの配列にデータを格納してから、 SqlParameterCollection コレクションを IDataParameter オブジェクトの配列に戻す例を次に示します。この例では、 SqlDataAdapter および DataSet が作成されていることを前提にしています。
Public Shared Function GetCustomerData(dataTableName As String) As DataTable
Dim dt As DataTable = New DataTable(dataTableName)
Dim conn As SqlConnection = New SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind")
Dim da As SqlDataAdapter = New SqlDataAdapter("SELECT CustomerID, CompanyName, ContactName FROM Customers", conn)
Dim tm As DataTableMapping = da.TableMappings.Add("Table", "Customers")
tm.ColumnMappings.Add("CompanyName", "Name")
tm.ColumnMappings.Add("ContactName", "Contact")
conn.Open()
da.FillSchema(dt, SchemaType.Mapped)
da.Fill(dt)
conn.Close()
Return dt
End Function
[C#]
public static DataTable GetCustomerData(string dataTableName)
{
DataTable dt = new DataTable(dataTableName);
SqlConnection conn = new SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind");
SqlDataAdapter da = new SqlDataAdapter("SELECT CustomerID, CompanyName, ContactName FROM Customers", conn);
DataTableMapping tm = da.TableMappings.Add("Table", "Customers");
tm.ColumnMappings.Add("CompanyName", "Name");
tm.ColumnMappings.Add("ContactName", "Contact");
conn.Open();
da.FillSchema(dt, SchemaType.Mapped);
da.Fill(dt);
conn.Close();
return dt;
}
[C++]
public:
static DataTable* GetCustomerData(String* dataTableName)
{
DataTable* dt = new DataTable(dataTableName);
SqlConnection* conn = new SqlConnection(S"Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind");
SqlDataAdapter* da = new SqlDataAdapter(S"SELECT CustomerID, CompanyName, ContactName FROM Customers", conn);
DataTableMapping* tm = da->TableMappings->Add(S"Table", S"Customers");
tm->ColumnMappings->Add(S"CompanyName", S"Name");
tm->ColumnMappings->Add(S"ContactName", S"Contact");
conn->Open();
da->FillSchema(dt, SchemaType::Mapped);
da->Fill(dt);
conn->Close();
return dt;
}; // End of GetCustomerData()
[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン をクリックします。
必要条件
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET
参照
DbDataAdapter クラス | DbDataAdapter メンバ | System.Data.Common 名前空間 | DbDataAdapter.FillSchema オーバーロードの一覧 | Fill