VB.netでpostgresSQLを使うSample(その1)
PR
vb.netでpostgresを使うのだ
write 2020/9/8 postgresSQL11
今回は.netライブラリのNpgsqlを使いOracleからPosgresSQLへVB.netアプリを移行する前段階として動作検証する為のサンプルを作成したものです。
NpgsqlはNugetからインストールできます。インストール後、参照設定してください。
では本題のVB.netのDBアクセスSampleですがAdapter、Readerと2つあります。Adapter、Readerもパラメタ変数などを使ったより実践に使えそうなサンプルです。
あとはストアドプロシジャ。こちらは情報があまりないですね。
ストアドプロシジャ使わないほうが簡単ですからね。
特にVB.netでのRefcursol、INOUT複数項目のサンプルは少ないです。
動くサンプルと解説、ポイントなどを暇な時に公開します。
※ストアドプロシジャ・・・Oracleで言うところのPLSQL、PostgreSQLだとPLPGSQLと言う言語がストアドプロシシャ。サーバ側でSQLを実行するのが目的。サーバ側で動くので早い。
PosgresSQL前準備
PosgresSQLをインストール。・・・PosgresSQL11で検証しています。
PosgresSQL使った方は分っていると思われますがポスグレデフォルトスキーマはpublicです。
私はスキーマ=admin、DB=DB1としています。
※Oracleからの移行するとスキーマ、ユーザー(ポスグレ=ロール)、Grant権限、シノニム、トリガなど似て異なる点を熟知しないと何回も作り直す羽目になります。移行ツールOra2PGなどを上手に使いながら PosgresSQLに合わせてDB環境を作ることをお勧めします。
createテーブル
1 2 3 4 5 6 7 |
create table admin.user_tbl ( user1 text not null , name1 text , pass1 text , place text , primary key (user1) ); |
テストデータをInsert
1 2 3 4 5 6 7 8 9 10 11 |
INSERT INTO admin.user2_tbl(user1, name1, pass1, place) VALUES ('aizawa','akiko','aa','1000100'); INSERT INTO admin.user2_tbl(user1, name1, pass1, place) VALUES ('sakura','sachiko','ss','2000000'); INSERT INTO admin.user2_tbl(user1, name1, pass1, place) VALUES ('tanaka','takao','tt','3000000'); INSERT INTO admin.user2_tbl(user1, name1, pass1, place) VALUES ('yamada','yasuo','yy','1000100'); |
VBのDBアクセスにはAdapter編
良いところ・・・FillするとDataTableにデータがガッツリとセットされて帰ってきます。あとはここから必要なデータを切り出し使えばOK。DataGridVIewならそのままセットすれば結構いける。データ少量ならこちらが楽。
悪いところ・・・readerより遅いと言われている。使い方やSQLにもよるのだと私的には思っているがそれは私の主観と言うことで・・・利点を知りどちらも使いこなせることが必要ですね。
form作成
form1
DBクラス追加
ClassDB
クラスと言ってもpostgresSQLの接続情報をSharedで使いまわしているだけのものです。
必要なものはサーバ、ポート、ユーザ、パス、DB名です。
1 2 3 4 5 |
Public Class ClassDB Public Shared ConString = "Server=localhost; Port=5432; User Id=postgres;Password=pass;Database=db1" Public Shared Con As Npgsql.NpgsqlConnection Public Shared Cmd As Npgsql.NpgsqlCommand Public Shared Adp As Npgsql.NpgsqlDataAdapter |
Button1_Click追加
※ポイントはアダプタでセレクトする場合はadp.SelectCommand.Parametersにパラメタ変数をセットすることです。
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 |
''' <summary> ''' AdapterでDBを読む ''' </summary> Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click If TextBox1.Text Is Nothing Or Len(TextBox1.Text) = 0 Then MessageBox.Show("ユーザー 未入力です") Exit Sub End If Using Con As New Npgsql.NpgsqlConnection(ClassDB.ConString) Dim SQL As String Dim Dt As New DataTable Dim Where1 As String = "" Try Con.Open() Using adp As New Npgsql.NpgsqlDataAdapter("", Con) If TextBox1.Text <> "" Then adp.SelectCommand.Parameters.Add("P1", NpgsqlTypes.NpgsqlDbType.Varchar) adp.SelectCommand.Parameters("P1").Direction = ParameterDirection.Input adp.SelectCommand.Parameters("P1").Value = TextBox1.Text Where1 = "user1 = :P1 " End If SQL = "select * from admin.user_tbl where " SQL += Where1 adp.SelectCommand.CommandText = SQL adp.Fill(Dt) If Dt.Rows.Count = 1 Then TextBox2.Text = "こんにちは " & Dt.Rows(0).Item("user1").ToString & " " & Dt.Rows(0).Item("name1").ToString & " さん!" Else MessageBox.Show("err") End If End Using Catch ex As Exception MessageBox.Show(ex.ToString) End End Try End Using End Sub |
実行結果VB
textbox1にyamadaと入力してadapterボタンをpostgresSQLからデータを読み込み表示がされます。
次回はRraderを使って同じ処理を実装します。ではでは
お知らせ
アイシステムでは、OracleからPostgreSQLへの移行やっちゃいますよ!
脱Oracle、さよならWindows♪
Oracle PL/SQLもやってますよ!