SqlDataAdapter.Fillメソッド
SqlDataAdapterオブジェクトのFillメソッドを使って、指定したテーブルの列データをComboBoxに表示し、選択した項目に対応したコードを取得するプログラムを作成します。
VB Express [SQL Server 2008版] サンプルプログラム
- フォームにコンボボックスとラベルを貼り付け
- SqlDataAdapter.Fillでレコード取得
- ComboBoxのDatasourceプロパティでデータバインド
- コンボボックスに部署マスター表の部署名称を表示
- 選択した部署名から部署コードを取得し、ラベル(Label2)に表示
- 初期表示時は「部署コードを選択してください」と表示
- 接続文字列は、アプリケーション構成ファイル(app.config)から取得
- コンボボックスの選択項目が変更された時の処理は、SelectedIndexChangedイベントハンドラに実装
Key | 列名 | データ型 | NULLを許容 |
---|---|---|---|
● | 部署コード | nchar(4) | しない |
部署名称 | nvarchar(20) | しない |
OleDbDataAdapter.Fillで特定列をComboBoxに表示するサンプルはこちら
ソースリストの枠内をクリックすると全選択できます。
Option Strict On Imports System.Data.SqlClient Imports System.Configuration ' 参照の追加 System.Configuration Public Class Form1 '********************************************************************* ' コンボボックスの選択項目が変更された時の処理 '********************************************************************* Private Sub ComboBox1_SelectedIndexChanged( _ ByVal sender As Object, ByVal e As System.EventArgs _ ) Handles ComboBox1.SelectedIndexChanged ' 選択項目が変更されたら、取得した部署コードをラベルに表示 If ComboBox1.SelectedIndex >= 0 Then Label2.Text = ComboBox1.SelectedValue.ToString End If End Sub '********************************************************************* ' フォームロード処理 '********************************************************************* Private Sub Form1_Load( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load Try Using con As New SqlConnection Using cmd As New SqlCommand ' 接続文字列をapp.configファイルから取得 ' (SQL Server 2008 Express Edition) Dim settings As ConnectionStringSettings settings = _ ConfigurationManager.ConnectionStrings _ ("販売管理ConnectionString") If settings Is Nothing Then ' 接続文字列取得エラー MessageBox.Show("接続文字列がapp.configに未登録") Else ' 接続文字列の設定 con.ConnectionString = settings.ConnectionString ' SqlCommand.Connectionプロパティの設定 cmd.Connection = con End If ' SQL文の設定 cmd.CommandText = _ "SELECT 部署コード, 部署名称 " & _ "FROM 部署マスター表 ORDER BY 部署コード" ' 部署マスター表からレコード取得 Dim dt As New DataTable Using da As New SqlDataAdapter da.SelectCommand = cmd da.Fill(dt) ' データグリッドビューにバインド ComboBox1.DataSource =dt End Using ' コンボボックスに表示する列の設定 ComboBox1.DisplayMember = "部署名称" ' 選択した項目のコードを ' 取得するための設定 ComboBox1.ValueMember = "部署コード" ' 項目を未選択状態に設定 ComboBox1.SelectedIndex = -1 ComboBox1.Text = "部署を選択してください" ' コード表示Label2を初期化 Label2.Text = Nothing End Using End Using Catch ex As Exception ' 例外が発生した時の処理 MessageBox.Show(ex.ToString) End Try End Sub End Class
DataTableの代わりに、DataSetを使って、SqlDataAdapter.Fillでレコードを取得するすることもできます。
' 部署マスター表からレコード取得 Dim ds As New DataSet Using da As New SqlDataAdapter da.SelectCommand = cmd da.Fill(ds, "部署テーブル") ' データグリッドビューにバインド ComboBox1.DataSource = ds.Tables("部署テーブル") End Using