【VB.NET】PostgreSQL に接続してデータを DataGridView に表示してみる
おはようございます。
今回はVB.NETでPostgreSQLに接続、データの取得をやってみます。
プログラムは前回のものを流用します。
また、PostgreSQL環境の作成は以下の記事を参考にしてください
スポンサーリンク
Nuget でパッケージをダウンロード
ソリューションエクスプローラーからプロジェクトを選択、右クリックし
「Nuget パッケージの管理」を選択します。
Nuget パッケージ管理画面が表示されるので、
検索窓に「npgsql」を入力し、「Npgsql」を選択、インストールボタンをクリックします。
プレビュー画面が表示された場合は、「OK」ボタンをクリックします。
ライセンス同意画面が表示されるので、「同意する」ボタンをクリックします。
出力ビューに「終了」が表示されれば完了です。
プログラム修正
宣言の追加
ダウンロードしたパッケージを利用するための宣言を追加します。
Form1.vb
1 | ImportsNpgsql |
初期表示処理の修正
MySQLに接続していた部分を PostgreSQLに接続するように修正し、
MySqlCommand、MySqlDataAdapterもそれぞれ PostgreSQL用のクラスに変更します。
Form1.vb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | ''' <summary> ''' フォームロード時の処理 ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> PrivateSubForm1_Load(sender AsObject,eAsEventArgs)HandlesMyBase.Load Using conn AsNewNpgsqlConnection("Server=localhost; Port=5432; User Id=USER01;Password=USER01;Database=DB01") ' データベースオープン conn.Open() ' 種別コンボボックスの内容をデータベースから取得して設定 ' データを取得 Dimcmd AsNpgsqlCommand=NewNpgsqlCommand("SELECT * FROM MSTKIND",conn) Dimda AsNpgsqlDataAdapter=NewNpgsqlDataAdapter(cmd) Dimdt AsDataTable=NewDataTable() da.Fill(dt) ' コンボボックスに値を設定 Dimsources AsList(Of Kind)=NewList(Of Kind) DimkAsKind=NewKind() k.KindCd="" k.KindName="指定なし" sources.Add(k) For Each row AsDataRow In dt.Rows k=NewKind() 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() EndUsing EndSub |
検索処理の修正
初期表示と同様、接続の処理とMysqlのクラスをPostgreSQL用に変更します。
Form1.vb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 | ''' <summary> ''' 検索処理 ''' </summary> PrivateSubsearch() Using conn AsNewNpgsqlConnection("Server=localhost; Port=5432; User Id=USER01;Password=USER01;Database=DB01") ' データベースオープン conn.Open() ' 検索条件を指定してデータを取得 Using con AsNewDataContext(conn) DimsearchName AsString=txtName.Text DimsearchKind AsString=CType(cmbKind.SelectedValue,Kind).KindCd ' 種別マスタ取得 ' 種別コンボボックスの内容をデータベースから取得して設定 ' データを取得 Dimcmd AsNpgsqlCommand=NewNpgsqlCommand("SELECT * FROM MSTKIND",conn) Dimda AsNpgsqlDataAdapter=NewNpgsqlDataAdapter(cmd) Dimdt AsDataTable=NewDataTable() da.Fill(dt) DimkindList AsList(Of Kind)=NewList(Of Kind) DimkAsKind=NewKind() For Each row AsDataRow In dt.Rows k=NewKind() k.KindCd=row("KIND_CD").ToString() k.KindName=row("KIND_NAME").ToString() kindList.Add(k) Next ' 猫一覧取得 DimSql AsString="SELECT * FROM TBLCAT" Dimwhere AsString="" If(searchName<>"")Then where=" WHERE NAME LIKE '"+searchName+"%'" EndIf If(searchKind<>"")Then If(where<>"")Then where+=" AND" Else where=" WHERE" EndIf where+=" KIND_CD = '"+searchKind+"'" EndIf Sql+=where cmd=NewNpgsqlCommand(Sql,conn) da=NewNpgsqlDataAdapter(cmd) dt=NewDataTable() da.Fill(dt) ' データグリッドビューに設定 DimiAsInteger=0 dgvCat.Rows.Clear() Fori=0To dt.Rows.Count()-1 ' 行追加 dgvCat.Rows.Add() ' No(プライマリなので編集不可) Dimno=NewDataGridViewTextBoxCell() no.Value=dt.Rows(i)("No") dgvCat(0,i)=no dgvCat(0,i).ReadOnly=True ' 名前 Dimname=NewDataGridViewTextBoxCell() name.Value=dt.Rows(i)("Name") dgvCat(1,i)=name ' 性別 Dimsex=NewDataGridViewComboBoxCell() sex.Items.AddRange({"♂ ","♀ "}) sex.DisplayStyle=DataGridViewComboBoxDisplayStyle.ComboBox dgvCat(2,i)=sex dgvCat(2,i).Value=dt.Rows(i)("Sex") ' 年齢 Dimage=NewDataGridViewTextBoxCell() age.Value=dt.Rows(i)("Age") dgvCat(3,i)=age ' 種別 Dimkind=NewDataGridViewComboBoxCell() 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") ' 好物 Dimfavorite=NewDataGridViewTextBoxCell() favorite.Value=dt.Rows(i)("Favorite") dgvCat(5,i)=favorite Next EndUsing ' データベースクローズ conn.Close() EndUsing EndSub |
起動してみる
種別にデータが設定されました。
検索ボタン押下でデータがグリッドに表示されました。
まとめ
PostgreSQLもほとんど変更無しで対応することができました。
実は EntityFrameworkを利用する予定だったのですが、
依存ファイルが見つからないエラーで嵌ってしまったので断念。
いずれ時間のある時にでも。。
ではでは。
ディスカッション
コメント一覧
まだ、コメントがありません