【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に変更するのも簡単にできそうですね。
次回以降はまた別の言語をやっていこうかと思います。
ではでは。









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