【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」ボタンをクリックします。
ライセンス同意画面が表示されるので、「同意する」ボタンをクリックします。
出力ビューに「終了」が表示されれば完了です。
画面(デザイナーソース)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 | <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()>_ Partial ClassForm1 InheritsSystem.Windows.Forms.Form 'フォームがコンポーネントの一覧をクリーンアップするために dispose をオーバーライドします。 <System.Diagnostics.DebuggerNonUserCode()>_ Protected OverridesSubDispose(ByValdisposing AsBoolean) Try If disposing AndAlsocomponents IsNot NothingThen components.Dispose() EndIf Finally MyBase.Dispose(disposing) EndTry EndSub 'Windows フォーム デザイナーで必要です。 Privatecomponents AsSystem.ComponentModel.IContainer 'メモ: 以下のプロシージャは Windows フォーム デザイナーで必要です。 'Windows フォーム デザイナーを使用して変更できます。 'コード エディターを使って変更しないでください。 <System.Diagnostics.DebuggerStepThrough()>_ PrivateSubInitializeComponent() Me.dgvCat=NewSystem.Windows.Forms.DataGridView() Me.ColNo=NewSystem.Windows.Forms.DataGridViewTextBoxColumn() Me.ColName=NewSystem.Windows.Forms.DataGridViewTextBoxColumn() Me.ColSex=NewSystem.Windows.Forms.DataGridViewTextBoxColumn() Me.ColAge=NewSystem.Windows.Forms.DataGridViewTextBoxColumn() Me.ColKind=NewSystem.Windows.Forms.DataGridViewTextBoxColumn() Me.ColRemark=NewSystem.Windows.Forms.DataGridViewTextBoxColumn() Me.lbName=NewSystem.Windows.Forms.Label() Me.lbKind=NewSystem.Windows.Forms.Label() Me.btnSearch=NewSystem.Windows.Forms.Button() Me.txtName=NewSystem.Windows.Forms.TextBox() Me.cmbKind=NewSystem.Windows.Forms.ComboBox() Me.btnAdd=NewSystem.Windows.Forms.Button() Me.btnUpdate=NewSystem.Windows.Forms.Button() Me.btnDelete=NewSystem.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(NewSystem.Windows.Forms.DataGridViewColumn(){Me.ColNo,Me.ColName,Me.ColSex,Me.ColAge,Me.ColKind,Me.ColRemark}) Me.dgvCat.Location=NewSystem.Drawing.Point(12,56) Me.dgvCat.Name="dgvCat" Me.dgvCat.RowTemplate.Height=21 Me.dgvCat.SelectionMode=System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect Me.dgvCat.Size=NewSystem.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=NewSystem.Drawing.Point(12,23) Me.lbName.Name="lbName" Me.lbName.Size=NewSystem.Drawing.Size(35,12) Me.lbName.TabIndex=1 Me.lbName.Text="名前:" ' 'lbKind ' Me.lbKind.AutoSize=True Me.lbKind.Location=NewSystem.Drawing.Point(192,23) Me.lbKind.Name="lbKind" Me.lbKind.Size=NewSystem.Drawing.Size(35,12) Me.lbKind.TabIndex=2 Me.lbKind.Text="種別:" ' 'btnSearch ' Me.btnSearch.Location=NewSystem.Drawing.Point(425,18) Me.btnSearch.Name="btnSearch" Me.btnSearch.Size=NewSystem.Drawing.Size(75,23) Me.btnSearch.TabIndex=3 Me.btnSearch.Text="検索" Me.btnSearch.UseVisualStyleBackColor=True ' 'txtName ' Me.txtName.Location=NewSystem.Drawing.Point(53,19) Me.txtName.Name="txtName" Me.txtName.Size=NewSystem.Drawing.Size(100,19) Me.txtName.TabIndex=4 ' 'cmbKind ' Me.cmbKind.FormattingEnabled=True Me.cmbKind.Location=NewSystem.Drawing.Point(233,19) Me.cmbKind.Name="cmbKind" Me.cmbKind.Size=NewSystem.Drawing.Size(121,20) Me.cmbKind.TabIndex=5 ' 'btnAdd ' Me.btnAdd.Location=NewSystem.Drawing.Point(14,318) Me.btnAdd.Name="btnAdd" Me.btnAdd.Size=NewSystem.Drawing.Size(75,23) Me.btnAdd.TabIndex=6 Me.btnAdd.Text="追加" Me.btnAdd.UseVisualStyleBackColor=True ' 'btnUpdate ' Me.btnUpdate.Location=NewSystem.Drawing.Point(95,318) Me.btnUpdate.Name="btnUpdate" Me.btnUpdate.Size=NewSystem.Drawing.Size(75,23) Me.btnUpdate.TabIndex=6 Me.btnUpdate.Text="更新" Me.btnUpdate.UseVisualStyleBackColor=True ' 'btnDelete ' Me.btnDelete.Location=NewSystem.Drawing.Point(176,318) Me.btnDelete.Name="btnDelete" Me.btnDelete.Size=NewSystem.Drawing.Size(75,23) Me.btnDelete.TabIndex=6 Me.btnDelete.Text="削除" Me.btnDelete.UseVisualStyleBackColor=True ' 'Form1 ' Me.AutoScaleDimensions=NewSystem.Drawing.SizeF(6.0!,12.0!) Me.AutoScaleMode=System.Windows.Forms.AutoScaleMode.Font Me.ClientSize=NewSystem.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() EndSub FriendWithEventsdgvCat AsDataGridView FriendWithEventslbName AsLabel FriendWithEventslbKind AsLabel FriendWithEventsbtnSearch AsButton FriendWithEventstxtName AsTextBox FriendWithEventscmbKind AsComboBox FriendWithEventsColNo AsDataGridViewTextBoxColumn FriendWithEventsColName AsDataGridViewTextBoxColumn FriendWithEventsColSex AsDataGridViewTextBoxColumn FriendWithEventsColAge AsDataGridViewTextBoxColumn FriendWithEventsColKind AsDataGridViewTextBoxColumn FriendWithEventsColRemark AsDataGridViewTextBoxColumn FriendWithEventsbtnAdd AsButton FriendWithEventsbtnUpdate AsButton FriendWithEventsbtnDelete AsButton EndClass |
プログラム修正
宣言の追加
ダウンロードしたパッケージを利用するための宣言を追加します。
Form1.vb
1 | ImportsMySql.Data.MySqlClient |
初期表示処理の修正
Oracleに接続していた部分を MySQLに接続するように修正し、
OracleCommand、OracleDataAdapterもそれぞれ MySQL用のクラスに変更します。
Form1.vb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | ''' <summary> ''' フォームロード時の処理 ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> PrivateSubForm1_Load(sender AsObject,eAsEventArgs)HandlesMyBase.Load 'Using conn As New OracleConnection("Data Source=localhost;User Id=USER01;Password=USER01;") Using conn AsNewMySqlConnection("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) Dimcmd AsMySqlCommand=NewMySqlCommand("SELECT * FROM MSTKIND",conn) Dimda AsMySqlDataAdapter=NewMySqlDataAdapter(cmd) Dimdt AsDataTable=NewDataTable() da.Fill(dt) ' コンボボックスに値を設定 Dimsources AsList(Of Kind)=NewList(Of Kind) DimkAsKind=NewKind() k.KindCd="" k.KindName="指定なし" sources.Add(k) For Each row AsDataRow In dt.Rows k=NewKind() 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() EndUsing EndSub |
検索処理の修正
初期表示と同様、接続の処理とOracleのクラスをMysql用に変更します。
Form1.vb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 | ''' <summary> ''' 検索処理 ''' </summary> PrivateSubsearch() 'Using conn As New OracleConnection("Data Source=localhost;User Id=USER01;Password=USER01;") Using conn AsNewMySqlConnection("Database=DB01;Data Source=localhost;User Id=USER01;Password=USER01; sqlservermode=True;") ' データベースオープン conn.Open() ' 検索条件を指定してデータを取得 Using con AsNewDataContext(conn) DimsearchName AsString=txtName.Text DimsearchKind AsString=CType(cmbKind.SelectedValue,Kind).KindCd ' 種別マスタ取得 ' 種別コンボボックスの内容をデータベースから取得して設定 ' データを取得 Dimcmd AsMySqlCommand=NewMySqlCommand("SELECT * FROM MSTKIND",conn) Dimda AsMySqlDataAdapter=NewMySqlDataAdapter(cmd) Dimdt AsDataTable=NewDataTable() da.Fill(dt) DimkindList AsList(Of Kind)=NewList(Of Kind) DimkAsKind=NewKind() For Each row AsDataRow In dt.Rows k=NewKind() k.KindCd=row("KIND_CD").ToString() k.KindName=row("KIND_NAME").ToString() kindList.Add(k) Next ' 猫一覧取得 DimSql AsString="SELECT * FROM TBLCAT" Dimwhere AsString="" If(searchName<>"")Then where=" WHERE NAME LIKE '"+searchName+"%'" EndIf If(searchKind<>"")Then If(where<>"")Then where+=" AND" Else where=" WHERE" EndIf where+=" KIND_CD = '"+searchKind+"'" EndIf Sql+=where cmd=NewMySqlCommand(Sql,conn) da=NewMySqlDataAdapter(cmd) dt=NewDataTable() da.Fill(dt) ' データグリッドビューに設定 DimiAsInteger=0 dgvCat.Rows.Clear() Fori=0To dt.Rows.Count()-1 ' 行追加 dgvCat.Rows.Add() ' No(プライマリなので編集不可) Dimno=NewDataGridViewTextBoxCell() no.Value=dt.Rows(i)("No") dgvCat(0,i)=no dgvCat(0,i).ReadOnly=True ' 名前 Dimname=NewDataGridViewTextBoxCell() name.Value=dt.Rows(i)("Name") dgvCat(1,i)=name ' 性別 Dimsex=NewDataGridViewComboBoxCell() sex.Items.AddRange({"♂","♀"}) sex.DisplayStyle=DataGridViewComboBoxDisplayStyle.ComboBox dgvCat(2,i)=sex dgvCat(2,i).Value=dt.Rows(i)("Sex") ' 年齢 Dimage=NewDataGridViewTextBoxCell() age.Value=dt.Rows(i)("Age") dgvCat(3,i)=age ' 種別 Dimkind=NewDataGridViewComboBoxCell() 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") ' 好物 Dimfavorite=NewDataGridViewTextBoxCell() favorite.Value=dt.Rows(i)("Favorite") dgvCat(5,i)=favorite Next EndUsing ' データベースクローズ conn.Close() EndUsing EndSub |
起動してみる
種別にデータが設定されました。
検索ボタン押下でデータがグリッドに表示されました。
まとめ
MySQLもOracle社のものになったからか、
ほとんど変更無しで対応することができました。めでたし。
ではでは。
ディスカッション
コメント一覧
参考にさせて頂いています。
すみません、form(デザイン)の元データにたどり着けません。
申し訳ございませんが、教えて頂けないでしょうか。
taka様
いつもブログを見ていただきありがとうございます。
デザイナーのソース、記事に追記しました。
参考になれば幸いです。
今後もよろしくお願いします。