今回はVB.NETでMySQLに接続、データの取得をやってみます。
プログラムは前回のものを流用します。
【VB.NET】Oracleに接続してデータを操作(追加・更新・削除)してみる
また、C#@WPFでのMySQL接続は下記を参考にしてください。
【WPF】MySQL(MariaDB)に接続してデータを DataGrid に表示してみる
ソリューションエクスプローラーからプロジェクトを選択、右クリックし
「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社のものになったからか、
ほとんど変更無しで対応することができました。めでたし。
ではでは。
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント