【VB.NET】PostgreSQL に接続してデータ操作(追加・更新・削除)をしてみる
おはようございます。
今回はPostgreSQLで追加、更新、削除をやってみましたが、
Oracle、MySQLと変わらず、クラスを変更するだけでほぼ対応ができてしまいました。
プログラムは前回のものを参考にしてください。
スポンサーリンク
プログラム修正
追加(行追加)処理
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に変更するのも簡単にできそうですね。
次回以降はまた別の言語をやっていこうかと思います。
ではでは。
ディスカッション
コメント一覧
まだ、コメントがありません