おはようございます。
今回はPostgreSQLで追加、更新、削除をやってみましたが、
Oracle、MySQLと変わらず、クラスを変更するだけでほぼ対応ができてしまいました。
プログラムは前回のものを参考にしてください。
【VB.NET】PostgreSQL に接続してデータを DataGridView に表示してみる
Form1.vb
''' <summary>
''' 追加ボタンクリックイベント
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click
' 追加後に更新されていなければ処理しない
If (AddRowFlg) Then
Return
End If
AddRowFlg = True
Using conn As New NpgsqlConnection("Server=localhost; Port=5432; User Id=USER01;Password=USER01;Database=DB01")
' データベースオープン
conn.Open()
' データ追加
Using con As New DataContext(conn)
Dim idx = dgvCat.Rows.Count()
' 行追加
dgvCat.Rows.Add()
' 種別マスタ取得
' 種別コンボボックスの内容をデータベースから取得して設定
' データを取得
Dim cmd As NpgsqlCommand = New NpgsqlCommand("SELECT * FROM MSTKIND", conn)
Dim da As NpgsqlDataAdapter = New NpgsqlDataAdapter(cmd)
Dim dt As DataTable = New DataTable()
da.Fill(dt)
Dim kindList As List(Of Kind) = New List(Of Kind)
Dim k As Kind = New Kind()
For Each row As DataRow In dt.Rows
k = New Kind()
k.KindCd = row("KIND_CD").ToString()
k.KindName = row("KIND_NAME").ToString()
kindList.Add(k)
Next
' 猫一覧取得
cmd = New NpgsqlCommand("SELECT * FROM TBLCAT", conn)
da = New NpgsqlDataAdapter(cmd)
dt = New DataTable()
da.Fill(dt)
Dim newNo = 0
' 使用できるNoを判定
For i As Integer = 1 To dt.Rows.Count() + 1
Dim selectNo = i
If dt.Select("No = '" + selectNo.ToString + "'").Length = 0 Then
newNo = selectNo
End If
Next
' No(プライマリなので編集不可)
Dim no = New DataGridViewTextBoxCell()
no.Value = newNo
dgvCat(0, idx) = no
dgvCat(0, idx).ReadOnly = True
' 名前
Dim name = New DataGridViewTextBoxCell()
dgvCat(1, idx) = name
' 性別
Dim sex = New DataGridViewComboBoxCell()
sex.Items.AddRange({"♂", "♀"})
sex.DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox
dgvCat(2, idx) = sex
' 年齢
Dim age = New DataGridViewTextBoxCell()
dgvCat(3, idx) = age
' 種別
Dim kind = New DataGridViewComboBoxCell()
kind.DataSource = kindList
kind.DisplayMember = "KindName"
kind.ValueMember = "KindCd"
kind.DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox
dgvCat(4, idx) = kind
' 好物
Dim favorite = New DataGridViewTextBoxCell()
dgvCat(5, idx) = favorite
End Using
conn.Close()
End Using
End Sub
Form1.vb
''' <summary>
''' 更新ボタンクリックイベント
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
Private Sub btnUpdate_Click(sender As Object, e As EventArgs) Handles btnUpdate.Click
Using conn = New OracleConnection("Data Source=localhost;User Id=USER01;Password=USER01;")
' データベースオープン
conn.Open()
' データ更新
For i = 0 To dgvCat.Rows.Count - 1
' テーブルから対象のデータを取得
Dim no As Integer = dgvCat(0, i).Value
' シーケンス列としていないので、
' 最初に件数を取得して No を計算する
Dim cmd As OracleCommand = New OracleCommand("SELECT COUNT(*) FROM TBLCAT WHERE No = '" + no.ToString() + "'", conn)
Dim cnt As Decimal = cmd.ExecuteScalar()
If (cnt = 0) Then
' データ追加
Dim query = "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 = New OracleCommand(query, conn)
cmd.ExecuteNonQuery()
Else
' データ変更
Dim query = "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 = New OracleCommand(query, conn)
cmd.ExecuteNonQuery()
End If
Next
conn.Close()
End Using
AddRowFlg = False
' データ再検索
search()
MessageBox.Show("データを更新しました。")
End Sub
Form1.vb
''' <summary>
''' 削除ボタンクリックイベント
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
Private Sub btnDelete_Click(sender As Object, e As EventArgs) Handles btnDelete.Click
Using conn = New OracleConnection("Data Source=localhost;User Id=USER01;Password=USER01;")
' データベースオープン
conn.Open()
' 選択されている行
For Each r As DataGridViewRow In dgvCat.SelectedRows
Dim Cat As Cat = CType(dgvCat.DataSource(), List(Of Cat)).Item(r.Index)
' データ削除
Dim query As String = "DELETE FROM TBLCAT WHERE NO = " + Cat.No
' クエリ実行
Dim cmd As OracleCommand = New OracleCommand(query, conn)
cmd.ExecuteNonQuery()
Next
conn.Close()
End Using
' データ再検索
search()
MessageBox.Show("データを削除しました。")
End Sub
Oracle、MySQLからPostgreSQLに変更するのも簡単にできそうですね。
次回以降はまた別の言語をやっていこうかと思います。
ではでは。
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント