【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を利用する予定だったのですが、
依存ファイルが見つからないエラーで嵌ってしまったので断念。
いずれ時間のある時にでも。。
ではでは。










ディスカッション
コメント一覧
まだ、コメントがありません