2019-09-30に投稿

【VB.NET】SQLiteに接続してデータを登録してみる

VBでSQLite、データ検索までしたので続いて登録、更新、削除をしてみました。
C#からの移植ではありますが、微妙に違うところもありますね。

プログラムは前回のものを流用します。
【VB.NET】SQLiteからデータを取得して表示する

画面の修正

ボタンの追加

画面に追加、更新、削除ボタンを追加し、それぞれにクリックイベントを設定します。

プログラム修正

検索処理の修正

追加更新削除後に再検索するため、別メソッドに切り出します。

        ''' <summary>
        ''' 検索ボタンクリックイベント.
        ''' </summary>
        ''' <param name="sender"></param>
        ''' <param name="e"></param>
        Private Sub btnSearch_Click(sender As Object, e As EventArgs) Handles btnSearch.Click
            search()
        End Sub

        ''' <summary>
        ''' 検索処理
        ''' </summary>
        Private Sub search()
            Using conn As New SQLiteConnection("Data Source=SampleDb.sqlite")

                ' データベースオープン
                conn.Open()

                ' 検索条件を指定してデータを取得
                Using con As New DataContext(conn)
                    Dim searchName As String = txtName.Text
                    Dim searchKind As String = CType(cmbKind.SelectedValue, Kind).KindCd

                    Dim tblCat As Table(Of Cat) = con.GetTable(Of Cat)
                    Dim result As IQueryable(Of Cat)

                    If (searchKind = "") Then

                        ' 種別が選択されていなければ名前のみ前方一致指定
                        result = From x In tblCat
                                 Where x.Name.StartsWith(searchName)
                                 Order By x.No
                                 Select x
                    Else

                        ' 種別が選択されていれば名前+種別で検索
                        result = From x In tblCat
                                 Where x.Name.StartsWith(searchName) &amp; x.KindCd = searchKind
                                 Order By x.No
                                 Select x
                    End If

                    ' データグリッドビューに設定
                    dgvCat.DataSource = result.ToList()

                End Using

                ' データベースクローズ
                conn.Close()

            End Using
        End Sub


データ追加

    ''' <summary>
        ''' 追加ボタンクリックイベント
        ''' </summary>
        ''' <param name="sender"></param>
        ''' <param name="e"></param>
        Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click

            Using conn As New SQLiteConnection("Data Source=SampleDb.sqlite")

                ' データベースオープン
                conn.Open()

                ' データ追加
                Using con As New DataContext(conn)

                    ' 対象のテーブルオブジェクトを取得
                    Dim Table = con.GetTable(Of Cat)
                    ' データ作成
                    Dim Cat As New Cat()
                    Cat.No = 5
                    Cat.Name = "こなつ"
                    Cat.Sex = "&#x2640;"
                    Cat.Age = 7
                    Cat.KindCd = "01"
                    Cat.Favorite = "布団"
                    ' データ追加
                    Table.InsertOnSubmit(Cat)
                    ' DBの変更を確定
                    con.SubmitChanges()

                End Using

                conn.Close()

            End Using

            ' データ再検索
            search()
            MessageBox.Show("データを追加しました。")

        End Sub

データ追加

追加ボタンをクリックすると、固定ではありますがデータが追加されます。

データ更新

        ''' <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 As New SQLiteConnection("Data Source=SampleDb.sqlite")

                ' データベースオープン
                conn.Open()

                ' データ更新
                Using con As New DataContext(conn)
                    ' 対象のテーブルオブジェクトを取得
                    Dim Table = con.GetTable(Of Cat)
                    ' 選択されているデータを取得
                    For Each r As DataGridViewRow In dgvCat.SelectedRows
                        Dim Cat As Cat = CType(dgvCat.DataSource(), List(Of Cat)).Item(r.Index)
                        ' テーブルから対象のデータを取得
                        Dim target As Cat = Table.Single(Function(x As Cat) x.No = Cat.No)
                        ' データ変更
                        target.Favorite = "高いところ"
                        ' DBの変更を確定
                        con.SubmitChanges()
                    Next

                End Using

                conn.Close()
            End Using

            ' データ再検索
            search()
            MessageBox.Show("データを更新しました。")

        End Sub

データ修正

更新ボタンをクリックすると、選択された行の好物が更新されます。

データ削除

        ''' <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 As New SQLiteConnection("Data Source=SampleDb.sqlite")

                ' データベースオープン
                conn.Open()

                ' データ削除
                Using con As New DataContext(conn)

                    ' 対象のテーブルオブジェクトを取得
                    Dim Table = con.GetTable(Of Cat)
                    ' 選択されているデータを取得
                    For Each r As DataGridViewRow In dgvCat.SelectedRows
                        Dim Cat As Cat = CType(dgvCat.DataSource(), List(Of Cat)).Item(r.Index)
                        ' テーブルから対象のデータを取得
                        Dim target As Cat = Table.Single(Function(x As Cat) x.No = Cat.No)
                        ' データ削除
                        Table.DeleteOnSubmit(target)
                        ' DBの変更を確定
                        con.SubmitChanges()

                    Next

                End Using

                conn.Close()
            End Using

            ' データ再検索
            search()
            MessageBox.Show("データを削除しました。")

        End Sub

データ削除

削除ボタンをクリックすると、選択されている行のデータが削除されます。

まとめ

とりあえず簡単ではありますが追加、更新、削除ができました。

次回はデータグリッドを直接編集してデータの更新等が行えるようにしたいと思います。

ではでは。

 

Originally published at www.doraxdora.com
ツイッターでシェア
みんなに共有、忘れないようにメモ

doraxdora

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

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

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

有料記事を販売できるようになりました!

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

コメント