【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','横取りフード');
追加したデータを確認します。
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#とほぼ同じなので難しくはないですね。
次回はデータの追加・更新・削除なんかもやってみます。
ではでは。
ディスカッション
コメント一覧
すみません、探し方が悪いのか
VB.netでのKindクラスとCatクラスの作り方が見当たらないようなのですが
WPFのファイルが自動変換されて使えるってことなのでしょうか?
匿名希望様
ご指摘ありがとうございます。
漏れてしまっていたようなので追記いたしました。
ご確認よろしくお願いします。
素早い確認と対応、どうもありがとうございました。
コンパイルは通りましたので大丈夫なようです。
プログラムの動きとかそれ以上の確認は明日になりそうです。
取り急ぎ、御礼までに。
動作報告です。
実行も動作し、コンボボックスにて”指定なし”の選択で検索ボタン押下はうまくいきました。
ただ、コンボボックスをキジトラ等に変更して検索を押下すると
———
System.Data.SQLite.SQLiteException: ‘SQL logic error
no such function: NVarChar’
———
というエラーが出てしまうようです。
勉強不足な私では何がどう間違っているかはわかりませんでした。
この先の記事へ進んでいけば動くようになる部分なのかもしれませんので、進めてみます。
どうもありがとうございました。
匿名希望様
すみません、プログラムに一部不備があったようです。
111行目あたりの Linqクエリ式を次のように変更してみてください。
Where x.Name.StartsWith(searchName) & x.KindCd.Equals(searchKind)
↓
Where x.Name.StartsWith(searchName) And x.KindCd.Equals(searchKind)
以上です。
よろしくお願いします。
何度もすみません。
この後の続き記事であろうと思われる
——-
https://www.doraxdora.com/blog/2017/12/24/post-3541/
【VB.NET】SQLiteに接続してデータを登録してみる
——-
の、ページが
>サイトに重大なエラーがありました。
とのことで、表示ができなくなっているようです。
お手数をおかけいたしますが、ご確認頂ければ幸いです。
よろしくお願いいたします。
何度もすみません。
続き記事だと思われる
>【VB.NET】SQLiteに接続してデータを登録してみる
の、ページが
>サイトに重大なエラーがありました。
とのことで、表示ができなくなっているようです。
お手数をお掛けいたしますが、ご確認いただければ幸いです。
よろしくお願いいたします。
匿名希望様
ご指摘ありがとうございます。
記事の方修正しましたのでご確認をお願いします。
よろしくお願いします。