【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を利用する予定だったのですが、
依存ファイルが見つからないエラーで嵌ってしまったので断念。
いずれ時間のある時にでも。。
ではでは。
ディスカッション
コメント一覧
まだ、コメントがありません