列名取得 [SQL Server 2008 Express][VB 2013]

Visual Basic 2010/2008 やさしいADO.NET DBプログラム

   やさしいVB 2010 / 2008 ADO.NET

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

列名取得:GetSchemaメソッドの引数

列名取得

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

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

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

GetSchemaメソッドには、ふたつの引数に5つの値を設定します。

  • 第1引数:列名を取得するためには、"Columns"を指定
  • 第2引数:テーブルを指定すれば取得する列名を限定できます。文字列配列になっており、次の4項目を設定
    • 1番目:app.configファイルの接続文字列のDatabaseキーワードに設定したデータベース名。Databaseキーワードを指定しない場合は、AttachDBFilenameで指定した完全パス名のデータベースファイル
    • 2番目:テーブル管理名称。テーブルを既定値で作成したので、既定値の"dbo"
    • 3番目:列名を取得するテーブル名

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

列名を取得するソースリスト

最初に参照の追加で、System.Configurationを追加してください。

app.configファイルの接続文字列を修正します。AttachDbFilenameキーワード内に「Database=販売管理データベース;」を追加します。

コネクションオブジェクトは、Usingステートメントを使っているので、データベースを自動的にCloseします。Closeメソッドを呼出す必要はありません。

Option Strict On
Imports System.Data.SqlClient
Imports System.Configuration

Public Class GetSchemaColumns

    Private Sub BtnColumnName_Click(ByVal sender As System.Object, _
      ByVal e As System.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

Copyright© やさしいVB2012/2010 ADO.NET. All rights reserved.