【VB.NET】MySQL(MariaDB)に接続してデータを DataGridView に表示してみる
おはようございます。
今回はVB.NETでMySQLに接続、データの取得をやってみます。
プログラムは前回のものを流用します。
【VB.NET】Oracleに接続してデータを操作(追加・更新・削除)してみる
また、C#@WPFでのMySQL接続は下記を参考にしてください。
【WPF】MySQL(MariaDB)に接続してデータを DataGrid に表示してみる
スポンサーリンク
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({"♂", "♀"}) 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社のものになったからか、
ほとんど変更無しで対応することができました。めでたし。
ではでは。
ディスカッション
コメント一覧
参考にさせて頂いています。
すみません、form(デザイン)の元データにたどり着けません。
申し訳ございませんが、教えて頂けないでしょうか。
taka様
いつもブログを見ていただきありがとうございます。
デザイナーのソース、記事に追記しました。
参考になれば幸いです。
今後もよろしくお願いします。