テーブル名取得メソッド [VB]

Visual Basic ADO.NET [Community Express]

GetSchemaTables

ConnectionクラスのGetSchemaメソッドで、接続したMicrosoft SQL Server Express で作成したデータベースのテーブル名を取得することができます。

テーブル名を取得するサンプルプログラム

テーブル名取得

接続したデータベースのテーブル名を取得するサンプルプログラムを作成します。

[テーブル名取得]ボタンをクリックすると、データベースに接続してテーブル名称を取得します。取得したテーブル名称は、テーブルごとに改行してラベルに表示します。

ConfigurationManagerクラスを使うためには、メニューの[プロジェクト]→[参照の追加]をクリックして、System.Configurationを追加してください。

GetSchemaメソッドの引数

テーブル名称を取得するためには、GetSchemaメソッドのふたつの引数に5つの値を正しく設定する必要があります。

◆第1引数:テーブル名称を取得するためには、"Tables"を指定

◆第2引数:文字列配列になっており、次の4項目を設定

  • 1番目:データベース名。接続文字列のDatabaseキーワードに設定したデータベース名。Databaseキーワードを指定していないときは、AttachDBFilenameで指定した完全パス名のデータベースファイル
  • 2番目:テーブル管理名称。テーブルを既定値で作成したので、既定値の"dbo"
  • 3番目:指定しない。Nothing
  • 4番目:テーブルタイプ。"BASE TABLE"を指定

GetSchemaメソッドを呼び出した結果は、DataTableオブジェクトとして返され、テーブル名称は、"TABLE_NAME"列に格納されています。

App.configファイルの接続文字列の修正

App.configファイルの接続文字列に、Databaseキーワードの設定がなければ、「Database=販売管理データベース;」を追加してください。Databaseを使えば、分かりやすい名称を付けることができます。

ソースリストの枠内をクリックすると全選択できます。

<connectionStrings>
    <add name="Adonet.My.MySettings.sampleConnectionString"
     connectionString="Data Source=.\SQLEXPRESS;
                       AttachDbFilename=&quot;
                                        D:\Program Files
                                        \Microsoft SQL Server
                                        \MSSQL10_50.SQLEXPRESS\MSSQL\DATA
                                        \販売管理データベース.mdf&quot;;
                       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