2019-10-20に投稿

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

おはようございます。

今回は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({"&#x2642;", "&#x2640;"})
                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に変更するのも簡単にできそうですね。
次回以降はまた別の言語をやっていこうかと思います。

ではでは。

Originally published at www.doraxdora.com

doraxdora

IT関係の仕事をしています/1985年生まれの東京在住/便利なサービスやツール漁りや料理などが好き/2017年~ブログやってます/自分でサービスとか作ってリリースしたい/何かありましたらお気軽にDMどうぞ

Crieitは個人で開発中です。 興味がある方は是非記事の投稿をお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください!

ボードとは?

関連記事

コメント