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

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

おはようございます。

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

プログラムは前回のものを流用します。

【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ボタンをクリックします。

プログラム修正

クラスの追加

猫クラス

Cat.vb

Imports System.Data.Linq.Mapping

''' <summary>
''' 猫クラス
''' </summary>
<Table(Name:="tblcat")>
Public Class Cat

    <Column(Name:="no", IsPrimaryKey:=True)>
    Public Property No As Integer

    <Column(Name:="name")>
    Public Property Name As String

    <Column(Name:="sex")>
    Public Property Sex As String

    <Column(Name:="age")>
    Public Property Age As Integer

    <Column(Name:="kind_cd")>
    Public Property KindCd As String

    <Column(Name:="favorite")>
    Public Property Favorite As String

End Class

種別クラス

Kind.vb

Imports System.Data.Linq.Mapping

''' <summary>
''' 種別クラス
''' </summary>
<Table(Name:="mstkind")>
Public Class Kind

    ''' <summary>
    ''' 種別コード
    ''' </summary>
    ''' <returns></returns>
    <Column(Name:="kind_cd", IsPrimaryKey:=True)>
    Public Property KindCd As String

    ''' <summary>
    ''' 種別名
    ''' </summary>
    ''' <returns></returns>
    <Column(Name:="kind_name")>
    Public Property KindName As String

End Class

 

インポート宣言の追加

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

    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) And x.KindCd = searchKind
                             Order By x.No
                             Select x
                End If

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

            End Using

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

        End Using
    End Sub

起動してみる

起動後の画面

起動後の画面。

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

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

検索した結果

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

まとめ

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

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

ではでは。

 

スポンサーリンク


関連するコンテンツ

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

Posted by doradora