ConnectionクラスのGetSchemaメソッド
ConnectionクラスのGetSchemaメソッドを呼び出すと、接続したMicrosoft SQL Server Express で作成したデータベースのテーブルの列名(フィールド名)を取得することができます。
列名を取得するGetSchemaメソッドの引数
接続したデータベースのテーブルの列名を取得するサンプルプログラムを作成します。
[列名取得]ボタンをクリックすると、GetSchemaメソッドの引数に指定したテーブル(表)の列名を表示します。
ConfigurationManagerクラスを使うためには、メニューの[プロジェクト]→[参照の追加]をクリックして、System.Configurationを追加してください。
列名を取得するためには、テーブル名を取得する場合と同様に、GetSchemaメソッドの引数を設定する必要があります。
◆第1引数:テーブル名称を取得するためには、"Columns"を指定
◆第2引数:文字列配列になっており、次の4項目を設定
- 1番目:データベース名。
App.configファイルの接続文字列のDatabaseキーワードに設定したデータベース名。Databaseキーワードを指定していないときは、AttachDBFilenameで指定した完全パス名のデータベースファイル - 2番目:テーブル管理名称。
テーブルを既定値で作成したので、既定値の"dbo" - 3番目:列名を取得するテーブル名
GetSchemaメソッドを呼び出した結果は、DataTableオブジェクトとして返され、テーブルの列(フィールド)名称は、"COLUMN_NAME"列に格納されています。
App.configファイルの接続文字列に、Databaseキーワードが設定されていなければ、「Database=販売管理データベース;」を追加してください。
デ-タベース名は、皆さんの作成したファイル名に変更してください。
ソースリストの枠内をクリックすると全選択できます。
<connectionStrings> <add name="Adonet.My.MySettings.sampleConnectionString" connectionString="Data Source=.\SQLEXPRESS; AttachDbFilename=" D:\Program Files \Microsoft SQL Server \MSSQL10_50.SQLEXPRESS\MSSQL\DATA \販売管理データベース.mdf"; Integrated Security=True; Connect Timeout=30; User Instance=True; ここに追加----------> Database=販売管理データベース;" providerName="System.Data.SqlClient" /> </connectionStrings>
テーブル列名取得サンプルプログラム
コネクションオブジェクトは、Usingステートメントを使っているので、データベースを自動的にCloseしてくれます。Closeメソッドを呼出す必要はありません。
Option Strict On Imports System.Data.SqlClient Imports System.Configuration Public Class GetSchemaColumns Private Sub BtnColumnName_Click(sender As Object, e As EventArgs) _ Handles BtnColumnName.Click Try Dim dt As New DataTable Using con As New SqlConnection Dim settings As ConnectionStringSettings ' 接続文字列をApp.configファイルから取得 settings = _ ConfigurationManager.ConnectionStrings("販売管理ConString") If settings Is Nothing Then ' 接続文字列取得エラー MessageBox.Show("App.configに未登録","接続文字列エラー") Else ' 接続文字列の設定 con.ConnectionString = settings.ConnectionString ' DBを開く con.Open() ' 列名称取得 dt = con.GetSchema("Columns", New String() _ {"販売管理データベース", "dbo", "商品マスター表"}) End If End Using ' スキーマ情報をラベルに表示 If dt.Rows.Count > 0 Then Label1.Text = "--- 商品マスター表列名 ---" & vbCrLf For i As Integer = 0 To dt.Rows.Count - 1 Label1.Text &= dt.Rows(i)("COLUMN_NAME").ToString Label1.Text &= vbCrLf Next i Else Label1.Text = "テーブルまたは列が未定義です" End If Catch ex As Exception MessageBox.Show(ex.ToString, "【例外発生】") End Try End Sub End Class