おはようございます。
今回はVB.NETでPostgreSQLに接続、データの取得をやってみます。
プログラムは前回のものを流用します。
【VB.NET】MySQL(MariaDB)に接続してデータ操作(追加・更新・削除)をしてみる
また、PostgreSQL環境の作成は以下の記事を参考にしてください
PostgreSQL 9.6.3 インストールからテーブル作成まで
ソリューションエクスプローラーからプロジェクトを選択、右クリックし
「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を利用する予定だったのですが、
依存ファイルが見つからないエラーで嵌ってしまったので断念。
いずれ時間のある時にでも。。
ではでは。
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント