データベースのテーブル名からカラム一覧と、各項目の名前・型・サイズ・NULL許可・主キー等を取得するには、SqlDataAdapter.FillSchema を使用します。
SqlDataAdapter.FillSchemaでテーブルのカラム情報を取得
SqlDataAdapter.FillSchemaメソッド で SELECTを発行するとDataTableにテーブルの詳細情報が設定されます。(データが不要な場合は何もヒットしないSELECT文を発行します。) DataTableのColumnsプロパティで全てのカラム情報、PrimaryKeyプロパティで主キーのカラム情報が取得できます。 ColumnsプロパティとPrimaryKeyプロパティはDataColumnクラスの配列になっており、DataColumnクラスの主なプロパティは次のとおりです。DataColumnクラスの主なプロパティ
プロパティ | 説明 |
---|---|
AllowDBNull | null 値で登録できる場合True |
AutoIncrement | レコード追加時、自動採番でユニークな番号が設定される(シーケンス項目)場合True |
AutoIncrementSeed | AutoIncrementがTrueの時、番号の開始値 |
AutoIncrementStep | AutoIncrementがTrueの時、番号の増分値 |
Caption | 列の説明文。説明文が未設定の場合はColumnNameと同じ内容。 |
ColumnName | 列の名前 |
DataType | データの型。テーブルの型ではなく、テーブルの型に対応する.NETの型(例:System.String・System.Int32) |
DefaultValue | 列のデフォルト値 |
MaxLength | 列の最大長 |
Unique | ユニーク(一意)項目の場合True |
サンプルコード
-
C#
private void Form1_Load(object sender, EventArgs e) { // 接続文字列。環境に合わせて修正してください String connectionString = "SERVER=LOCALHOST\\SQLEXPRESS;UID=sa2;PWD=sa2;DATABASE=Web"; using (SqlConnection connection = new SqlConnection(connectionString)) { // コネクションを開く connection.Open(); // SqlDataAdapter.FillSchemaでDataTableにテーブル情報を設定 DataTable dataTable = new DataTable(); SqlDataAdapter dataAdapter = new SqlDataAdapter("SELECT * FROM sys.objects WHERE 1 = 2", connection); dataAdapter.FillSchema(dataTable, SchemaType.Source); // dataTable.Columnsでテーブル項目の情報を取得できる // ここではListに入れ直してデータグリッドビューで表示できるようにしている List<DataColumn> columnList = new List<DataColumn>(); foreach (DataColumn column in dataTable.Columns) { columnList.Add(column); } // 画面に表示 // 全ての項目情報をデータグリッドビューで表示 this.dataGridView1.DataSource = columnList; // PrimaryKeyプロパティは主キー項目の配列 this.dataGridView2.DataSource = dataTable.PrimaryKey; } }
-
VB.NET
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ' 接続文字列。環境に合わせて修正してください Dim connectionString As String = "SERVER=LOCALHOST\SQLEXPRESS;UID=sa2;PWD=sa2;DATABASE=Web" Using connection As New SqlConnection(connectionString) ' コネクションを開く connection.Open() ' SqlDataAdapter.FillSchemaでDataTableにテーブル情報を設定 Dim dataTable As DataTable = New DataTable() Dim dataAdapter As SqlDataAdapter = New SqlDataAdapter("SELECT * FROM sys.objects WHERE 1 = 1", connection) dataAdapter.FillSchema(dataTable, SchemaType.Source) ' dataTable.Columnsでテーブル項目の情報を取得できる ' ここではListに入れ直してデータグリッドビューで表示できるようにしている Dim columnList As New List(Of DataColumn) For Each column As DataColumn In dataTable.Columns columnList.Add(column) Next ' 画面に表示 ' 全ての項目情報をデータグリッドビューで表示 Me.DataGridView1.DataSource = columnList ' PrimaryKeyプロパティは主キー項目の配列 Me.DataGridView2.DataSource = dataTable.PrimaryKey End Using End Sub
サンプルコードのダウンロード
サンプルコードの実行には Microsoft Visual Studio 2008 以上のバージョンが必要です。 2008以外のバージョンではプロジェクトを開いた際にファイルの変換が必要な場合があります。その場合は変換後に実行してください。検証環境
- Microsoft Visual Studio 2008 Version 9.0.30729.4462 QFE Edition: Professional
- Microsoft .NET Framework Version 3.5 SP1
- Microsoft SQL Server Express Edition (64-bit) プラットフォーム:NT x64 バージョン:10.0.6556.0
- Microsoft Windows 7 Professional Service Pack 1 (Microsoft Windows NT 6.1 (7601))