VB.NETでデータベースを操作
VB.netでデータベースサーバーへ問い合わせる
様々なアプリからデータベースサーバーを呼び出して、データを取りだせますが、今度はVB.netで試してみましょう。
データの一覧性では、Excelには劣りますが、例えばデータベースの管理ツールなどを作る事ができます。
Connector/NETの準備
Visual Studio でMySQL を使用するには、 Connector/NETが必要です。
Googleなどで、「Connector/NET」 で検索しすると、MySQLの、downloadsのページがヒットします。


はじめて Connector/NET をダウンロードする場合は、Oracleへユーザー登録が必要です。

Connector/NET をインストールする
Connector/NET のファイルのダウンロードが終了したら、ダウンロードしたファイルを実行してインストールを開始します。


インストールは、特に変わった事をしない限りは、まさに「典型的な」のtypicalで進行して大丈夫でしょう。


Connector/NET をプロジェクトに追加する
インストールが完了したら、 Visual Studio community を起動し、Visual Basic のフォームアプリケーションを開きます。


プロジェクトのウィンドウが開きます。
ソリューションエクスプローラから参照を選び、参照を追加します。

mysql で検索すると、MySql.Data が見つかりますので、OKを押してプロジェクトに追加します。
なお、この手順を実行したコンピュータは Connector/NET が既にインストールされているので、新しいプロジェクトを起こす時は、このプロジェクトへの追加からで大丈夫ですが、MySQLを使用するプロジェクトを新規に作成する際は、必ずプロジェクトへの参照の追加が必須になります。
Moduleにデータベースへの処理を追加する。
ソリューションの下で右クリックし、追加からモジュールを追加します。
私の場合、データベース関係はここに設定しています。

Imports MySql.Data.MySqlClient Module Module1 Public mysqlCon As New MySqlConnection Public sqlCommand As New MySqlCommand Sub sql_st() ''データベースに接続 Dim Builder = New MySqlConnectionStringBuilder() ' データベースに接続するために必要な情報をBuilderに与える Builder.Server = "192.168.1.14" Builder.SslMode = MySqlSslMode.None Builder.Port = 3306 Builder.UserID = "user01" Builder.Password = "upassword" Builder.Database = "vegetables" Dim ConStr = Builder.ToString() mysqlCon.ConnectionString = ConStr mysqlCon.Open() End Sub Sub sql_cl() ' データベースの切断 mysqlCon.Close() End Sub Function sql_result_return(ByVal query As String) As DataTable ''データセットを返すSELECT系のSQLを処理するコード Dim dt As New DataTable() Try ' 4.データ取得のためのアダプタの設定 Dim Adapter = New MySqlDataAdapter(query, mysqlCon) ' 5.データを取得 Dim Ds As New DataSet Adapter.Fill(dt) Return dt Catch ex As Exception Return dt End Try End Function Function sql_result_no(ByVal query As String) ''データセットを返さない、DELETE、UPDATE、INSERT系のSQLを処理するコード 'System.Threading.Thread.Sleep(50) Try sqlCommand.Connection = mysqlCon sqlCommand.CommandText = query sqlCommand.ExecuteNonQuery() Return "Complete" Catch ex As Exception Return ex.Message End Try End Function End Module
Subが2つ、Functionが2つあります。
sql_st はデータベースへの接続
sql_cl はデータベースの切断
sql_result_return はSELECT文を処理する
sql_result_no はDELETE、UPDATE、INSERTを処理します。
これを定型文にしておき、プロジェクト作成の時にモジュールに貼り付けしています。
Moduleの処理をフォームから呼び出す。
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load ''データベースと接続 Call sql_st() Dim sql1 As String = "SELECT" sql1 &= " `serial`" sql1 &= ",`仕入先`" sql1 &= " FROM `wholesale`" sql1 &= ";" Dim dTb1 As DataTable = sql_result_return(sql1) If dTb1.Rows.Count = 0 Then Else For Each DRow As DataRow In dTb1.Rows Me.ListBox1.Items.Add(DRow.Item(1)) Next End If ''データベースを切断 Call sql_cl() End Sub
フォームには、リストボックスを一つ設置し、Form1_Loadにコードを記述します。
loadは、フォームが表示されたときに実行されるコードです。
つまり、フォームが呼び出される度、データベースに接続する手続きをして、sql1にSELECT文を入れ、 sql_result_return に送り、データベースがSQLを実行した結果が、dTb1のオブジェクトに入ります。
あとは、dTb1が空になるまでループで繰り返し取り出し、それをリストボックスにaddしています。
最後に、 データベースと切断する手続きを行っています

実行すると、フォームが表示され、リストの中に先ほどのExcel VBAの時と同じ表示がされました。
VB.netからデータベースに書き込みする。
データベースへ問い合わせが出来るという事は、新規登録や修正も可能です。
フォームにテキストボックスを一つと、ボタンを一つ加えます。
そのボタンに対し、プログラムコードを与えます。
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ''データベースと接続 Call sql_st() Dim sql1 As String = "INSERT INTO `wholesale` (`仕入先`) VALUE ('" sql1 &= Me.TextBox1.Text sql1 &= "');" Dim rs As String = sql_result_no(sql1) If rs = "Complete" Then MsgBox("登録完了", MsgBoxStyle.Information Or MsgBoxStyle.OkOnly, "正常終了") Else MsgBox("登録に失敗しました" & vbCrLf & "システム担当を呼んでください", MsgBoxStyle.Critical Or MsgBoxStyle.OkOnly, "異常終了") End If ''データベースを切断 Call sql_cl() End Sub
先ほどと同じく、データベースに繋ぎます。
テキストボックスの値をINSERT文に取り込み、sql_result_noに与えて結果を文字列に取り込んでいます。
SQLが成功すると、Completeが返ってくるはずですから、それを拾えば成功のメッセージボックスを表示します。

一度、フォームを閉じて、再度開くと、先ほどの表示プログラムが作動し、追加されたホクレン青果が見えています。

このように、VB.NETでデータベースをコントロールすれば、例えば、テーブルを作成する CREATE TABLEを発行したり、テーブルを削除するDROP TABLEなども発行できます。
データベースの管理で、定例的に行う操作があったら、プログラムしておけば効率的にメンテナンスを施す事が可能になるでしょう。
ちなみに、ここではMySQLを例としてあげましたが、他にもPostgreSQLや、Microsoftが提供しているSQL Server、Accessなど、ODBCがあれば、概ねとのデータベースとも接続して、データを引き出したり書き込んだりが可能です。
このように、データベースを扱うスキルは、必ず御社のお役にたてると思います。
今のお仕事内容をデータベース化できるかどうかもご相談いただけますので、お問い合わせフォームからご連絡ください。