2019-09-27に投稿

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

今回はデータベースから取得したデータを表示したいと思います。

プログラムは前回のものを流用します。
【VB.NET】SQLiteのデータベース及びテーブルを動的に作成してみる

データの追加

前回作成したテーブルにデータをツール、もしくはコマンドラインから追加します。

    INSERT INTO MSTKIND VALUES ("01", "キジトラ");
    INSERT INTO MSTKIND VALUES ("02", "長毛種(不明)");
    INSERT INTO MSTKIND VALUES ("03", "ミケ(っぽい)");
    INSERT INTO MSTKIND VALUES ("04", "サビ");
    INSERT INTO MSTKIND VALUES ("09", "その他");
    INSERT INTO TBLCAT VALUES('1','そら','♂','6','01','犬の人形');
    INSERT INTO TBLCAT VALUES('2','りく','♂','5','02','人間');
    INSERT INTO TBLCAT VALUES('3','うみ','♀','4','03','高級ウェットフード');
    INSERT INTO TBLCAT VALUES('4','こうめ','♀','2','04','横取りフード');

追加したデータを確認します。

A5m2SQLで確認

Linq で データを取得、設定する

参照の追加

ソリューション・エクスプローラーからプロジェクトの「参照」を右クリックし、「参照の追加」を選択します。

参照の追加

「System.Data.Linq」で検索、チェックしてOKボタンをクリックします。

プログラム修正

インポート宣言の追加

次の記述を先頭に追加します。

    Imports System.Data.Linq


フォームロード時にコンボボックスにデータを設定する

次の記述をフォームロード時のイベントメソッドに追加します。

            ' 種別コンボボックスの内容をデータベースから取得して設定
            Using con As New DataContext(conn)
                Dim kinds As Table(Of Kind) = con.GetTable(Of Kind)
                Dim result As IQueryable(Of Kind) = From x In kinds Order By x.KindCd Select x

                Dim empty As New Kind()
                empty.KindCd = ""
                empty.KindName = "指定なし"

                Dim list = result.ToList()
                list.Insert(0, empty)

                ' コンボボックスに設定
                cmbKind.DataSource = list
                cmbKind.DisplayMember = "kindName"

            End Using

検索ボタンのクリックイベント追加

デザイナー画面にて配置した「検索」ボタンをダブルクリックします。

検索処理の実装

自動生成されたメソッドに次の処理を記述します。

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

        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

起動してみる

起動後の画面

起動後の画面。

コンボボックスにデータ設定

コンボボックスに無事にデータが設定されました。

検索した結果

検索ボタンをクリックして、データグリッドビューにも無事にデータが表示されました。

まとめ

C#とほぼ同じなので難しくはないですね。

次回はデータの追加・更新・削除なんかもやってみます。

ではでは。

 

Originally published at www.doraxdora.com

doraxdora

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

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

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

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

ボードとは?

関連記事

コメント