【VB.NET】PostgreSQL に接続してデータ操作(追加・更新・削除)をしてみる
おはようございます。
今回はPostgreSQLで追加、更新、削除をやってみましたが、
Oracle、MySQLと変わらず、クラスを変更するだけでほぼ対応ができてしまいました。
プログラムは前回のものを参考にしてください。
スポンサーリンク
プログラム修正
追加(行追加)処理
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 | ''' <summary> ''' 追加ボタンクリックイベント ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> PrivateSubbtnAdd_Click(sender AsObject,eAsEventArgs)HandlesbtnAdd.Click ' 追加後に更新されていなければ処理しない If(AddRowFlg)Then Return EndIf AddRowFlg=True Using conn AsNewNpgsqlConnection("Server=localhost; Port=5432; User Id=USER01;Password=USER01;Database=DB01") ' データベースオープン conn.Open() ' データ追加 Using con AsNewDataContext(conn) Dimidx=dgvCat.Rows.Count() ' 行追加 dgvCat.Rows.Add() ' 種別マスタ取得 ' 種別コンボボックスの内容をデータベースから取得して設定 ' データを取得 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 ' 猫一覧取得 cmd=NewNpgsqlCommand("SELECT * FROM TBLCAT",conn) da=NewNpgsqlDataAdapter(cmd) dt=NewDataTable() da.Fill(dt) DimnewNo=0 ' 使用できるNoを判定 ForiAsInteger=1To dt.Rows.Count()+1 DimselectNo=i If dt.Select("No = '"+selectNo.ToString+"'").Length=0Then newNo=selectNo EndIf Next ' No(プライマリなので編集不可) Dimno=NewDataGridViewTextBoxCell() no.Value=newNo dgvCat(0,idx)=no dgvCat(0,idx).ReadOnly=True ' 名前 Dimname=NewDataGridViewTextBoxCell() dgvCat(1,idx)=name ' 性別 Dimsex=NewDataGridViewComboBoxCell() sex.Items.AddRange({"♂","♀"}) sex.DisplayStyle=DataGridViewComboBoxDisplayStyle.ComboBox dgvCat(2,idx)=sex ' 年齢 Dimage=NewDataGridViewTextBoxCell() dgvCat(3,idx)=age ' 種別 Dimkind=NewDataGridViewComboBoxCell() kind.DataSource=kindList kind.DisplayMember="KindName" kind.ValueMember="KindCd" kind.DisplayStyle=DataGridViewComboBoxDisplayStyle.ComboBox dgvCat(4,idx)=kind ' 好物 Dimfavorite=NewDataGridViewTextBoxCell() dgvCat(5,idx)=favorite EndUsing conn.Close() EndUsing EndSub |
更新処理
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 | ''' <summary> ''' 更新ボタンクリックイベント ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> PrivateSubbtnUpdate_Click(sender AsObject,eAsEventArgs)HandlesbtnUpdate.Click Using conn=NewOracleConnection("Data Source=localhost;User Id=USER01;Password=USER01;") ' データベースオープン conn.Open() ' データ更新 Fori=0To dgvCat.Rows.Count-1 ' テーブルから対象のデータを取得 Dimno AsInteger=dgvCat(0,i).Value ' シーケンス列としていないので、 ' 最初に件数を取得して No を計算する Dimcmd AsOracleCommand=NewOracleCommand("SELECT COUNT(*) FROM TBLCAT WHERE No = '"+no.ToString()+"'",conn) Dimcnt AsDecimal=cmd.ExecuteScalar() If(cnt=0)Then ' データ追加 Dimquery="INSERT INTO TBLCAT VALUES ("+ (cnt+1)+ ", '"+dgvCat(1,i).Value+"'"+ ", '"+dgvCat(2,i).Value+"'"+ ", "+dgvCat(3,i).Value+"'"+ ", '"+dgvCat(4,i).Value+"'"+ ", '"+dgvCat(5,i).Value+"')" cmd=NewOracleCommand(query,conn) cmd.ExecuteNonQuery() Else ' データ変更 Dimquery="UPDATE TBLCAT SET"+ " NAME = '"+dgvCat(1,i).Value.ToString()+"'"+ ", SEX = '"+dgvCat(2,i).Value.ToString()+"'"+ ", AGE = '"+dgvCat(3,i).Value.ToString()+"'"+ ", KIND_CD = '"+dgvCat(4,i).Value.ToString()+"'"+ ", FAVORITE = '"+dgvCat(5,i).Value.ToString()+"' "+ "WHERE NO = '"+dgvCat(0,i).Value.ToString()+"'" cmd=NewOracleCommand(query,conn) cmd.ExecuteNonQuery() EndIf Next conn.Close() EndUsing AddRowFlg=False ' データ再検索 search() MessageBox.Show("データを更新しました。") EndSub |
削除処理
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 | ''' <summary> ''' 削除ボタンクリックイベント ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> PrivateSubbtnDelete_Click(sender AsObject,eAsEventArgs)HandlesbtnDelete.Click Using conn=NewOracleConnection("Data Source=localhost;User Id=USER01;Password=USER01;") ' データベースオープン conn.Open() ' 選択されている行 For EachrAsDataGridViewRow In dgvCat.SelectedRows DimCat AsCat=CType(dgvCat.DataSource(),List(Of Cat)).Item(r.Index) ' データ削除 Dimquery AsString="DELETE FROM TBLCAT WHERE NO = "+Cat.No ' クエリ実行 Dimcmd AsOracleCommand=NewOracleCommand(query,conn) cmd.ExecuteNonQuery() Next conn.Close() EndUsing ' データ再検索 search() MessageBox.Show("データを削除しました。") EndSub |
まとめ
Oracle、MySQLからPostgreSQLに変更するのも簡単にできそうですね。
次回以降はまた別の言語をやっていこうかと思います。
ではでは。
ディスカッション
コメント一覧
まだ、コメントがありません