2019-10-07に投稿

【VB.NET】Oracleに接続してデータを検索してみる

またVB.NETですが。
WPFでもやりましたが Oracle に接続してとりあえずのことをやってみます。

プログラムは前回のもの、データベースの作成なんかはWPFを参考にしてください。

【WPF】Oracleを使ってデータを DataGrid に表示する

【VB.NET】データグリッドビューの行を動的に追加する

参照の追加

参照の追加

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

dll の追加

参照の追加画面が表示されるので、「参照」ボタンをクリックします。

dll の追加

Oracle.DataAcess.dllを選択し、「追加」ボタンをクリックして完了です。

プログラム修正

宣言の追加

下記の記述を追加します。

Imports System.Data
Imports System.Data.OracleClient

起動時の処理

    ''' <summary>
    ''' フォームロード時の処理
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        Using conn As New OracleConnection("Data Source=localhost;User Id=USER01;Password=USER01;")

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

            ' 種別コンボボックスの内容をデータベースから取得して設定
            ' データを取得
            Dim cmd As OracleCommand = New OracleCommand("SELECT * FROM MSTKIND", conn)
            Dim da As OracleDataAdapter = New OracleDataAdapter(cmd)
            Dim dt As DataTable = New DataTable()
            da.Fill(dt)

            ' コンボボックスに値を設定
            Dim sources As List(Of Kind) = New List(Of Kind)
            Dim k As Kind = New Kind()
            k.KindCd = ""
            k.KindName = "指定なし"
            sources.Add(k)
            For Each row As DataRow In dt.Rows
                k = New Kind()
                k.KindCd = row("KIND_CD").ToString()
                k.KindName = row("KIND_NAME").ToString()
                sources.Add(k)
            Next

            Me.cmbKind.DataSource = sources
            Me.cmbKind.DisplayMember = "KindName"

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

        End Using

    End Sub

検索処理

    ''' <summary>
    ''' 検索処理
    ''' </summary>
    Private Sub search()

        Using conn As New OracleConnection("Data Source=localhost;User Id=USER01;Password=USER01;")

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

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

                ' 種別マスタ取得

                ' 種別コンボボックスの内容をデータベースから取得して設定
                ' データを取得
                Dim cmd As OracleCommand = New OracleCommand("SELECT * FROM MSTKIND", conn)
                Dim da As OracleDataAdapter = New OracleDataAdapter(cmd)
                Dim dt As DataTable = New DataTable()
                da.Fill(dt)
                Dim kindList As List(Of Kind) = New List(Of Kind)
                Dim k As Kind = New Kind()
                For Each row As DataRow In dt.Rows
                    k = New Kind()
                    k.KindCd = row("KIND_CD").ToString()
                    k.KindName = row("KIND_NAME").ToString()
                    kindList.Add(k)
                Next

                ' 猫一覧取得
                Dim Sql As String = "SELECT * FROM TBLCAT"
                Dim where As String = ""
                If (searchName <> "") Then

                    where = " WHERE NAME LIKE '" + searchName + "%'"
                End If
                If (searchKind <> "") Then
                    If (where <> "") Then
                        where += " AND"
                    Else
                        where = " WHERE"
                    End If
                    where += " KIND_CD = '" + searchKind + "'"
                End If

                Sql += where

                cmd = New OracleCommand(Sql, conn)
                da = New OracleDataAdapter(cmd)
                dt = New DataTable()
                da.Fill(dt)

                ' データグリッドビューに設定
                Dim i As Integer = 0
                dgvCat.Rows.Clear()
                For i = 0 To dt.Rows.Count() - 1

                    ' 行追加
                    dgvCat.Rows.Add()

                    ' No(プライマリなので編集不可)
                    Dim no = New DataGridViewTextBoxCell()
                    no.Value = dt.Rows(i)("No")
                    dgvCat(0, i) = no
                    dgvCat(0, i).ReadOnly = True

                    ' 名前
                    Dim name = New DataGridViewTextBoxCell()
                    name.Value = dt.Rows(i)("Name")
                    dgvCat(1, i) = name

                    ' 性別
                    Dim sex = New DataGridViewComboBoxCell()
                    sex.Items.AddRange({"♂", "♀"})
                    sex.DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox
                    dgvCat(2, i) = sex
                    dgvCat(2, i).Value = dt.Rows(i)("Sex")

                    ' 年齢
                    Dim age = New DataGridViewTextBoxCell()
                    age.Value = dt.Rows(i)("Age")
                    dgvCat(3, i) = age

                    ' 種別
                    Dim kind = New DataGridViewComboBoxCell()
                    kind.DataSource = kindList
                    kind.DisplayMember = "KindName"
                    kind.ValueMember = "KindCd"
                    kind.DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox
                    dgvCat(4, i) = kind
                    dgvCat(4, i).Value = dt.Rows(i)("Kind_Cd")

                    ' 好物
                    Dim favorite = New DataGridViewTextBoxCell()
                    favorite.Value = dt.Rows(i)("Favorite")
                    dgvCat(5, i) = favorite

                Next

            End Using

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

        End Using
    End Sub

まとめ

ちょっと画面は取り忘れましたが、これでOracleからデータ取得、表示ができます。

次回もOracleの予定です。

ではでは。

Originally published at www.doraxdora.com

doraxdora

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

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

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

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

ボードとは?

関連記事

コメント