2019-10-10に投稿

【VB.NET】MySQL(MariaDB)に接続してデータを DataGridView に表示してみる

読了目安:15分

今回はVB.NETでMySQLに接続、データの取得をやってみます。

プログラムは前回のものを流用します。
【VB.NET】Oracleに接続してデータを操作(追加・更新・削除)してみる

また、C#@WPFでのMySQL接続は下記を参考にしてください。
【WPF】MySQL(MariaDB)に接続してデータを DataGrid に表示してみる

Nuget でパッケージをダウンロード

NuGetパッケージの管理

ソリューションエクスプローラーからプロジェクトを選択、右クリックし
「Nuget パッケージの管理」を選択します。

NuGetパッケージの管理画面

Nuget パッケージ管理画面が表示されるので、
検索窓に「mysql」を入力し、「MySql.Data」を選択、インストールボタンをクリックします。

プレビュー画面

プレビュー画面が表示された場合は、「OK」ボタンをクリックします。

ライセンス同意画面

ライセンス同意画面が表示されるので、「同意する」ボタンをクリックします。

出力ビュー

出力ビューに「終了」が表示されれば完了です。

画面(デザイナーソース)

<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class Form1
    Inherits System.Windows.Forms.Form

    'フォームがコンポーネントの一覧をクリーンアップするために dispose をオーバーライドします。
    <System.Diagnostics.DebuggerNonUserCode()> _
    Protected Overrides Sub Dispose(ByVal disposing As Boolean)
        Try
            If disposing AndAlso components IsNot Nothing Then
                components.Dispose()
            End If
        Finally
            MyBase.Dispose(disposing)
        End Try
    End Sub

    'Windows フォーム デザイナーで必要です。
    Private components As System.ComponentModel.IContainer

    'メモ: 以下のプロシージャは Windows フォーム デザイナーで必要です。
    'Windows フォーム デザイナーを使用して変更できます。  
    'コード エディターを使って変更しないでください。
    <System.Diagnostics.DebuggerStepThrough()> _
    Private Sub InitializeComponent()
        Me.dgvCat = New System.Windows.Forms.DataGridView()
        Me.ColNo = New System.Windows.Forms.DataGridViewTextBoxColumn()
        Me.ColName = New System.Windows.Forms.DataGridViewTextBoxColumn()
        Me.ColSex = New System.Windows.Forms.DataGridViewTextBoxColumn()
        Me.ColAge = New System.Windows.Forms.DataGridViewTextBoxColumn()
        Me.ColKind = New System.Windows.Forms.DataGridViewTextBoxColumn()
        Me.ColRemark = New System.Windows.Forms.DataGridViewTextBoxColumn()
        Me.lbName = New System.Windows.Forms.Label()
        Me.lbKind = New System.Windows.Forms.Label()
        Me.btnSearch = New System.Windows.Forms.Button()
        Me.txtName = New System.Windows.Forms.TextBox()
        Me.cmbKind = New System.Windows.Forms.ComboBox()
        Me.btnAdd = New System.Windows.Forms.Button()
        Me.btnUpdate = New System.Windows.Forms.Button()
        Me.btnDelete = New System.Windows.Forms.Button()
        CType(Me.dgvCat, System.ComponentModel.ISupportInitialize).BeginInit()
        Me.SuspendLayout()
        '
        'dgvCat
        '
        Me.dgvCat.AllowUserToAddRows = False
        Me.dgvCat.AllowUserToDeleteRows = False
        Me.dgvCat.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize
        Me.dgvCat.Columns.AddRange(New System.Windows.Forms.DataGridViewColumn() {Me.ColNo, Me.ColName, Me.ColSex, Me.ColAge, Me.ColKind, Me.ColRemark})
        Me.dgvCat.Location = New System.Drawing.Point(12, 56)
        Me.dgvCat.Name = "dgvCat"
        Me.dgvCat.RowTemplate.Height = 21
        Me.dgvCat.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect
        Me.dgvCat.Size = New System.Drawing.Size(488, 256)
        Me.dgvCat.TabIndex = 0
        '
        'ColNo
        '
        Me.ColNo.DataPropertyName = "no"
        Me.ColNo.HeaderText = "No"
        Me.ColNo.Name = "ColNo"
        Me.ColNo.Width = 30
        '
        'ColName
        '
        Me.ColName.DataPropertyName = "name"
        Me.ColName.HeaderText = "名前"
        Me.ColName.Name = "ColName"
        '
        'ColSex
        '
        Me.ColSex.DataPropertyName = "sex"
        Me.ColSex.HeaderText = "性別"
        Me.ColSex.Name = "ColSex"
        Me.ColSex.Width = 35
        '
        'ColAge
        '
        Me.ColAge.DataPropertyName = "age"
        Me.ColAge.HeaderText = "年齢"
        Me.ColAge.Name = "ColAge"
        Me.ColAge.Width = 35
        '
        'ColKind
        '
        Me.ColKind.DataPropertyName = "kindCd"
        Me.ColKind.HeaderText = "種別"
        Me.ColKind.Name = "ColKind"
        Me.ColKind.Width = 120
        '
        'ColRemark
        '
        Me.ColRemark.DataPropertyName = "favorite"
        Me.ColRemark.HeaderText = "好物"
        Me.ColRemark.Name = "ColRemark"
        Me.ColRemark.Width = 120
        '
        'lbName
        '
        Me.lbName.AutoSize = True
        Me.lbName.Location = New System.Drawing.Point(12, 23)
        Me.lbName.Name = "lbName"
        Me.lbName.Size = New System.Drawing.Size(35, 12)
        Me.lbName.TabIndex = 1
        Me.lbName.Text = "名前:"
        '
        'lbKind
        '
        Me.lbKind.AutoSize = True
        Me.lbKind.Location = New System.Drawing.Point(192, 23)
        Me.lbKind.Name = "lbKind"
        Me.lbKind.Size = New System.Drawing.Size(35, 12)
        Me.lbKind.TabIndex = 2
        Me.lbKind.Text = "種別:"
        '
        'btnSearch
        '
        Me.btnSearch.Location = New System.Drawing.Point(425, 18)
        Me.btnSearch.Name = "btnSearch"
        Me.btnSearch.Size = New System.Drawing.Size(75, 23)
        Me.btnSearch.TabIndex = 3
        Me.btnSearch.Text = "検索"
        Me.btnSearch.UseVisualStyleBackColor = True
        '
        'txtName
        '
        Me.txtName.Location = New System.Drawing.Point(53, 19)
        Me.txtName.Name = "txtName"
        Me.txtName.Size = New System.Drawing.Size(100, 19)
        Me.txtName.TabIndex = 4
        '
        'cmbKind
        '
        Me.cmbKind.FormattingEnabled = True
        Me.cmbKind.Location = New System.Drawing.Point(233, 19)
        Me.cmbKind.Name = "cmbKind"
        Me.cmbKind.Size = New System.Drawing.Size(121, 20)
        Me.cmbKind.TabIndex = 5
        '
        'btnAdd
        '
        Me.btnAdd.Location = New System.Drawing.Point(14, 318)
        Me.btnAdd.Name = "btnAdd"
        Me.btnAdd.Size = New System.Drawing.Size(75, 23)
        Me.btnAdd.TabIndex = 6
        Me.btnAdd.Text = "追加"
        Me.btnAdd.UseVisualStyleBackColor = True
        '
        'btnUpdate
        '
        Me.btnUpdate.Location = New System.Drawing.Point(95, 318)
        Me.btnUpdate.Name = "btnUpdate"
        Me.btnUpdate.Size = New System.Drawing.Size(75, 23)
        Me.btnUpdate.TabIndex = 6
        Me.btnUpdate.Text = "更新"
        Me.btnUpdate.UseVisualStyleBackColor = True
        '
        'btnDelete
        '
        Me.btnDelete.Location = New System.Drawing.Point(176, 318)
        Me.btnDelete.Name = "btnDelete"
        Me.btnDelete.Size = New System.Drawing.Size(75, 23)
        Me.btnDelete.TabIndex = 6
        Me.btnDelete.Text = "削除"
        Me.btnDelete.UseVisualStyleBackColor = True
        '
        'Form1
        '
        Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 12.0!)
        Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
        Me.ClientSize = New System.Drawing.Size(514, 353)
        Me.Controls.Add(Me.btnDelete)
        Me.Controls.Add(Me.btnUpdate)
        Me.Controls.Add(Me.btnAdd)
        Me.Controls.Add(Me.cmbKind)
        Me.Controls.Add(Me.txtName)
        Me.Controls.Add(Me.btnSearch)
        Me.Controls.Add(Me.lbKind)
        Me.Controls.Add(Me.lbName)
        Me.Controls.Add(Me.dgvCat)
        Me.Name = "Form1"
        Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
        Me.Text = "一覧"
        CType(Me.dgvCat, System.ComponentModel.ISupportInitialize).EndInit()
        Me.ResumeLayout(False)
        Me.PerformLayout()

    End Sub

    Friend WithEvents dgvCat As DataGridView
    Friend WithEvents lbName As Label
    Friend WithEvents lbKind As Label
    Friend WithEvents btnSearch As Button
    Friend WithEvents txtName As TextBox
    Friend WithEvents cmbKind As ComboBox
    Friend WithEvents ColNo As DataGridViewTextBoxColumn
    Friend WithEvents ColName As DataGridViewTextBoxColumn
    Friend WithEvents ColSex As DataGridViewTextBoxColumn
    Friend WithEvents ColAge As DataGridViewTextBoxColumn
    Friend WithEvents ColKind As DataGridViewTextBoxColumn
    Friend WithEvents ColRemark As DataGridViewTextBoxColumn
    Friend WithEvents btnAdd As Button
    Friend WithEvents btnUpdate As Button
    Friend WithEvents btnDelete As Button
End Class

 

プログラム修正

宣言の追加

ダウンロードしたパッケージを利用するための宣言を追加します。

Form1.vb

Imports MySql.Data.MySqlClient

 

初期表示処理の修正

Oracleに接続していた部分を MySQLに接続するように修正し、
OracleCommand、OracleDataAdapterもそれぞれ MySQL用のクラスに変更します。

Form1.vb

        ''' <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;")
            Using conn As New MySqlConnection("Database=DB01;Data Source=localhost;User Id=USER01;Password=USER01; sqlservermode=True;")

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

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

                Dim cmd As MySqlCommand = New MySqlCommand("SELECT * FROM MSTKIND", conn)
                Dim da As MySqlDataAdapter = New MySqlDataAdapter(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

検索処理の修正

初期表示と同様、接続の処理とOracleのクラスをMysql用に変更します。

Form1.vb

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

            'Using conn As New OracleConnection("Data Source=localhost;User Id=USER01;Password=USER01;")
            Using conn As New MySqlConnection("Database=DB01;Data Source=localhost;User Id=USER01;Password=USER01; sqlservermode=True;")

                ' データベースオープン
                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 MySqlCommand = New MySqlCommand("SELECT * FROM MSTKIND", conn)
                    Dim da As MySqlDataAdapter = New MySqlDataAdapter(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 MySqlCommand(Sql, conn)
                    da = New MySqlDataAdapter(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({"&#x2642;", "&#x2640;"})
                        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

起動してみる

起動後の画面

種別にデータが設定されました。

検索結果

検索ボタン押下でデータがグリッドに表示されました。

まとめ

MySQLもOracle社のものになったからか、
ほとんど変更無しで対応することができました。めでたし。

ではでは。

Originally published at www.doraxdora.com

doraxdora

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

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

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

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

ボードとは?

関連記事

コメント