VB.NETとSQLサーバを用いた開発(導入編)
はじめに
自分自身、職場で使ってる言語についての記事作るんですか?!ってなって、急いで自分のPCで環境構築したので、この辺疎かになってました。
ので、VisualStudio上でFormが動くようにするにはどうするべきかの解説をここで行います。
最低限必要な知識
・VB.NETでは、VisualStudio2022
・SQLでは、SSMS21(SQL Server Management Studio 21)
これらを使います。
厳密には両方VisualStudioのサービスなんですけど、別のアプリケーションを使っているので、区別します。
導入 VisualStudio2022編
まずVisualStudio2022をインストールします
左のコミュニティ(無料版)で大丈夫です。
これをダウンロードしたら、次は「.NET デスクトップ開発」をインストールします。
できたら、新しいプロジェクトの作成に「Windows フォームアプリ」があるので、それを実行します。
プロジェクト名とかは適当でいいです
フレームワークは.NET 8.0で
すると、こんな感じの画面が表示されます。おめでとう。
しかしこれだけだとSQL側が未設定なので、ソリューションを右クリック→ソリューションのNuGetパッケージの管理を行います。
そこで、参照の検索に、Microsoft.Data.SqlClientと書いて、それをインストールしてください。
これでVisualStudio2022側のセットアップは終了
導入 SSMS編
こちらから、SSMSのダウンロードを行います。
ダウンロードしたインストーラを開くと、こんな画面になりますので、SSMSをインストールしてください。
SSMSがインストール出来たら、それを開いてください。
サーバ接続の画面が見えますが、まだサーバ自体を導入していないため、参照できるサーバが無いと思います。ここで一旦SSMSはストップ。
次に、Microsoft SQL Server のダウンロードを行います。
こちらはサーバそのものであり、サーバに対する操作を行うSSMSとは別物です。
バージョンはEXPRESS版で大丈夫です。
ダウンロードが完了するとこんな画面になります。
SSMSに戻り、接続画面のローカルを開くと、サーバが増設されています。
クリックして、サーバ名を入れて接続しましょう。
(認証はWindows認証で大丈夫です。)
この状態で接続を試みますが、エラーになると思います。
これは「Advanced」→「Trust Server Certificate」でいけます。
これで
いけました。
これで、セットアップは終了です。
簡単な使い方
SSMS編
まず、引き続きSSMSを操作します。
オブジェクトエクスプローラ(左)にある「データベース」フォルダを右クリック→「新しいデータベース」
これで、適当に名前を決めて作ってください。
なんか円柱みたいなやつが出来ました。
展開すると色々出てきます。
使うのは9割9分「テーブル」、「プログラミング→ストアドプロシージャ」の2つだけです。
軽く、軽くおさらい。
・テーブル
要するに表のこと。Excelとかでよく見るアレ。
テーブルフォルダを右クリックして、「新規作成」→「テーブル」で作れる
こんな感じで列名とそのデータ型を決めてやると
その通りの列ができる。(表は手動で埋めた)
ここにいろんな操作を加えていこうというやつ。
・ストアドプロシージャ
表を操るプログラムのこと。
ストアドプロシージャを右クリックして、「ストアドプロシージャ」で作れる
USE DB
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- プロシージャ定義部
ALTER PROCEDURE [dbo].[ストアド1]
@ID nvarchar(10)
AS
-- 処理部
SELECT *
FROM [dbo]. [テーブル1]
WHERE ID=@ID
こんな感じに書いて、作ったストアドを右クリック→「ストアドプロシージャの実行」
して、
こんな画面になるから、書き込んでやると
IDが「100」の行が絞り込める。
VB.NET編
次に、このストアドとテーブルを使って、VB.NETとの連携が取れるかのテストを行う。
とりあえずこんな感じのFormを作ってください。
Form1を右クリック→「デザイナーの表示」
デザイン
以下、コントロール名の対応
IDのTextBox→「TextBox_ID」
IDの決定のButton→「Button_決定」
住所のTextBox→「TextBox_住所」
名前のTextBox→「TextBox_名前」
電話番号のTextBox→「TextBox_電話番号」
住所、名前、電話番号は操作してはいけないので、プロパティでReadOnly(書き込み不可)をTrueにしておいてください。
次に、デザインのButton_決定をダブルクリックすると、関数みたいなのができると思います。
これで、ボタン処理の枠組みができました。
この中で主にプログラムを書き込んでいきます。
Imports Microsoft.Data.SqlClient
Public Class Form1
Private Sub Button_決定_Click(sender As Object, e As EventArgs) Handles Button_決定.Click
Dim connectionString As String = "Server= 「サーバ名」;Database=「DB名」;Trusted_Connection=True;TrustServerCertificate=True;"
Try
Using conn As New SqlConnection(connectionString)
Using cmd As New SqlCommand("ストアド1", conn)
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.AddWithValue("@ID", TextBox_ID.Text)
conn.Open()
Using reader As SqlDataReader = cmd.ExecuteReader()
If reader.Read() Then
' ストアドが返す列名に合わせて設定してください
TextBox_住所.Text = reader("住所").ToString()
TextBox_名前.Text = reader("名前").ToString()
TextBox_電話番号.Text = reader("電話番号").ToString()
MessageBox.Show("読み込みが完了しました")
Else
MessageBox.Show("該当するデータが見つかりませんでした。")
End If
End Using
End Using
End Using
Catch ex As Exception
MessageBox.Show("エラー: " & ex.Message)
End Try
End Sub
End Class
まず最初に、冒頭の
Imports Microsoft.Data.SqlClient
これは、SqlClientを動かすのに必須の儀式です。
この記述を有効にするために、準備段階でMicrosoft.Data.SqlClientをインストールする必要がありました。
うまくいかない場合は、もう一度設定を見直してください。
次に、接続方法を定義します。
Dim connectionString As String = "Server= 「サーバ名」;Database=「DB名」;Trusted_Connection=True;TrustServerCertificate=True;"
これは、SQLサーバへ接続するための儀式です。
サーバ名とDB名の情報を書き込んでください。
残り2つは、接続を信頼するか的なアレなので、何も考えずに書いてください。
次に、Try~Catch構文は、エラーが見つかったらメッセージを吐くってだけなので、その中身を見ましょう。
Using conn As New SqlConnection(connectionString)
Using cmd As New SqlCommand("ストアド1", conn)
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.AddWithValue("@ID", TextBox_ID.Text)
conn.Open()
Using reader As SqlDataReader = cmd.ExecuteReader()
これも大概儀式なんですが、いくつか注目してもらいたい点があります。
2行目の"ストアド1"には、さっき書いたストアド名を記入してください。
4行目のcmd.Parameters.AddWithValue("@ID",TextBox_ID.Text)
これは、さっき配置したTextBox_IDの中に書いた文字を、@IDとしてストアドに渡しますよという合図です。
さっきストアドプロシージャで実行した動作を、VB.NETから値を渡して再現するわけです。
5~6行目で、SQLデータベースと実際の通信を行う部分です。
If reader.Read() Then
' ストアドが返す列名に合わせて設定してください
TextBox_住所.Text = reader("住所").ToString()
TextBox_名前.Text = reader("名前").ToString()
TextBox_電話番号.Text = reader("電話番号").ToString()
MessageBox.Show("読み込みが完了しました")
Else
MessageBox.Show("該当するデータが見つかりませんでした。")
End If
これは、SQL側からデータを貰えたかどうかで動作を変える記述です。
実在するIDを送っていれば、住所、名前、電話番号のTextBoxの値は、それぞれ受け取ったデータの値となります。
逆に、実在しないIDを送っていた場合「見つからなかった」という旨のメッセージが出ます。
実際に動かしてみます。
実在するIDを書いて決定を押すと
住所、名前、電話番号が表示されました。完
終わりに
今回は導入編ということで、本当に最低限動くようにするための方法を紹介しました。
VB.NETとSSMSは、両方無料だったのが記事を書くうえでありがたかったです。
これを読んでVB.NETとSQLサーバが連携出来た人がいたなら幸いです。
出来たらぜひ、こちらの実践編にも挑戦してみてください。
Discussion