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

2017年12月24日VB.NET,開発

おはようございます。

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) And 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 = "♀"
                    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
データ削除

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

まとめ

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

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

ではでは。

 

スポンサーリンク


関連するコンテンツ

2017年12月24日VB.NET,開発SQLite,VB.NET,サンプルプログラム

Posted by doradora