【VB.NET】PostgreSQL に接続してデータを DataGridView に表示してみる
おはようございます。
今回はVB.NETでPostgreSQLに接続、データの取得をやってみます。
プログラムは前回のものを流用します。
また、PostgreSQL環境の作成は以下の記事を参考にしてください
スポンサーリンク
Nuget でパッケージをダウンロード
ソリューションエクスプローラーからプロジェクトを選択、右クリックし
「Nuget パッケージの管理」を選択します。
Nuget パッケージ管理画面が表示されるので、
検索窓に「npgsql」を入力し、「Npgsql」を選択、インストールボタンをクリックします。
プレビュー画面が表示された場合は、「OK」ボタンをクリックします。
ライセンス同意画面が表示されるので、「同意する」ボタンをクリックします。
出力ビューに「終了」が表示されれば完了です。
プログラム修正
宣言の追加
ダウンロードしたパッケージを利用するための宣言を追加します。
Form1.vb
Imports Npgsql
初期表示処理の修正
MySQLに接続していた部分を PostgreSQLに接続するように修正し、
MySqlCommand、MySqlDataAdapterもそれぞれ PostgreSQL用のクラスに変更します。
Form1.vb
''' <summary>
''' フォームロード時の処理
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Using conn As New NpgsqlConnection("Server=localhost; Port=5432; User Id=USER01;Password=USER01;Database=DB01")
' データベースオープン
conn.Open()
' 種別コンボボックスの内容をデータベースから取得して設定
' データを取得
Dim cmd As NpgsqlCommand = New NpgsqlCommand("SELECT * FROM MSTKIND", conn)
Dim da As NpgsqlDataAdapter = New NpgsqlDataAdapter(cmd)
Dim dt As DataTable = New DataTable()
da.Fill(dt)
' コンボボックスに値を設定
Dim sources As List(Of Kind) = New List(Of Kind)
Dim k As Kind = New Kind()
k.KindCd = ""
k.KindName = "指定なし"
sources.Add(k)
For Each row As DataRow In dt.Rows
k = New Kind()
k.KindCd = row("KIND_CD").ToString()
k.KindName = row("KIND_NAME").ToString()
sources.Add(k)
Next
Me.cmbKind.DataSource = sources
Me.cmbKind.DisplayMember = "KindName"
' データベースクローズ
conn.Close()
End Using
End Sub
検索処理の修正
初期表示と同様、接続の処理とMysqlのクラスをPostgreSQL用に変更します。
Form1.vb
''' <summary>
''' 検索処理
''' </summary>
Private Sub search()
Using conn As New NpgsqlConnection("Server=localhost; Port=5432; User Id=USER01;Password=USER01;Database=DB01")
' データベースオープン
conn.Open()
' 検索条件を指定してデータを取得
Using con As New DataContext(conn)
Dim searchName As String = txtName.Text
Dim searchKind As String = CType(cmbKind.SelectedValue, Kind).KindCd
' 種別マスタ取得
' 種別コンボボックスの内容をデータベースから取得して設定
' データを取得
Dim cmd As NpgsqlCommand = New NpgsqlCommand("SELECT * FROM MSTKIND", conn)
Dim da As NpgsqlDataAdapter = New NpgsqlDataAdapter(cmd)
Dim dt As DataTable = New DataTable()
da.Fill(dt)
Dim kindList As List(Of Kind) = New List(Of Kind)
Dim k As Kind = New Kind()
For Each row As DataRow In dt.Rows
k = New Kind()
k.KindCd = row("KIND_CD").ToString()
k.KindName = row("KIND_NAME").ToString()
kindList.Add(k)
Next
' 猫一覧取得
Dim Sql As String = "SELECT * FROM TBLCAT"
Dim where As String = ""
If (searchName <> "") Then
where = " WHERE NAME LIKE '" + searchName + "%'"
End If
If (searchKind <> "") Then
If (where <> "") Then
where += " AND"
Else
where = " WHERE"
End If
where += " KIND_CD = '" + searchKind + "'"
End If
Sql += where
cmd = New NpgsqlCommand(Sql, conn)
da = New NpgsqlDataAdapter(cmd)
dt = New DataTable()
da.Fill(dt)
' データグリッドビューに設定
Dim i As Integer = 0
dgvCat.Rows.Clear()
For i = 0 To dt.Rows.Count() - 1
' 行追加
dgvCat.Rows.Add()
' No(プライマリなので編集不可)
Dim no = New DataGridViewTextBoxCell()
no.Value = dt.Rows(i)("No")
dgvCat(0, i) = no
dgvCat(0, i).ReadOnly = True
' 名前
Dim name = New DataGridViewTextBoxCell()
name.Value = dt.Rows(i)("Name")
dgvCat(1, i) = name
' 性別
Dim sex = New DataGridViewComboBoxCell()
sex.Items.AddRange({"♂ ", "♀ "})
sex.DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox
dgvCat(2, i) = sex
dgvCat(2, i).Value = dt.Rows(i)("Sex")
' 年齢
Dim age = New DataGridViewTextBoxCell()
age.Value = dt.Rows(i)("Age")
dgvCat(3, i) = age
' 種別
Dim kind = New DataGridViewComboBoxCell()
kind.DataSource = kindList
kind.DisplayMember = "KindName"
kind.ValueMember = "KindCd"
kind.DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox
dgvCat(4, i) = kind
dgvCat(4, i).Value = dt.Rows(i)("Kind_Cd")
' 好物
Dim favorite = New DataGridViewTextBoxCell()
favorite.Value = dt.Rows(i)("Favorite")
dgvCat(5, i) = favorite
Next
End Using
' データベースクローズ
conn.Close()
End Using
End Sub
起動してみる
種別にデータが設定されました。
検索ボタン押下でデータがグリッドに表示されました。
まとめ
PostgreSQLもほとんど変更無しで対応することができました。
実は EntityFrameworkを利用する予定だったのですが、
依存ファイルが見つからないエラーで嵌ってしまったので断念。
いずれ時間のある時にでも。。
ではでは。
ディスカッション
コメント一覧
まだ、コメントがありません