列名取得メソッド [VB]

Visual Basic ADO.NET [Community Express]

ConnectionクラスのGetSchemaメソッド

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

列名を取得するGetSchemaメソッドの引数

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

列名取得

[列名取得]ボタンをクリックすると、GetSchemaメソッドの引数に指定したテーブル(表)の列名を表示します。

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

GetSchemaメソッドの引数

列名を取得するためには、テーブル名を取得する場合と同様に、GetSchemaメソッドの引数を設定する必要があります。

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

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

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

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

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

App.configファイルの接続文字列に、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>

テーブル列名取得サンプルプログラム

コネクションオブジェクトは、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