GetSchemaTables
ConnectionクラスのGetSchemaメソッドで、接続したMicrosoft SQL Server Express で作成したデータベースのテーブル名を取得することができます。
テーブル名を取得するサンプルプログラム
接続したデータベースのテーブル名を取得するサンプルプログラムを作成します。
[テーブル名取得]ボタンをクリックすると、データベースに接続してテーブル名称を取得します。取得したテーブル名称は、テーブルごとに改行してラベルに表示します。
ConfigurationManagerクラスを使うためには、メニューの[プロジェクト]→[参照の追加]をクリックして、System.Configurationを追加してください。
テーブル名称を取得するためには、GetSchemaメソッドのふたつの引数に5つの値を正しく設定する必要があります。
◆第1引数:テーブル名称を取得するためには、"Tables"を指定
◆第2引数:文字列配列になっており、次の4項目を設定
- 1番目:データベース名。接続文字列のDatabaseキーワードに設定したデータベース名。Databaseキーワードを指定していないときは、AttachDBFilenameで指定した完全パス名のデータベースファイル
- 2番目:テーブル管理名称。テーブルを既定値で作成したので、既定値の"dbo"
- 3番目:指定しない。Nothing
- 4番目:テーブルタイプ。"BASE TABLE"を指定
GetSchemaメソッドを呼び出した結果は、DataTableオブジェクトとして返され、テーブル名称は、"TABLE_NAME"列に格納されています。
App.configファイルの接続文字列に、Databaseキーワードの設定がなければ、「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>
Option Strict On Imports System.Data.SqlClient Imports System.Configuration Public Class GetSchemaTables Private Sub BtnTableName_Click(sender As Object, e As EventArgs) Handles BtnTableName.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("Tables", New String() _ {"販売管理データベース", "dbo", Nothing, "BASE TABLE"}) 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)("TABLE_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