【VB.NET】PostgreSQL に接続してデータ操作(追加・更新・削除)をしてみる

2018年1月25日VB.NET,開発

おはようございます。

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

ではでは。

スポンサーリンク


関連するコンテンツ

2018年1月25日VB.NET,開発PostgreSQL,VB.NET,サンプルプログラム

Posted by doradora