VB.NETとSQLサーバを用いた開発(導入編)

に公開

はじめに

https://zenn.dev/nbs_tokyo/articles/deb5e202be7fb1
https://zenn.dev/nbs_tokyo/articles/e540e70a19c11e
この2記事を書いたあとに思ったんですが、環境構築出来てないと結局作るところまでいかないよねと。
自分自身、職場で使ってる言語についての記事作るんですか?!ってなって、急いで自分のPCで環境構築したので、この辺疎かになってました。
ので、VisualStudio上でFormが動くようにするにはどうするべきかの解説をここで行います。

最低限必要な知識

・VB.NETでは、VisualStudio2022
・SQLでは、SSMS21(SQL Server Management Studio 21)
これらを使います。
厳密には両方VisualStudioのサービスなんですけど、別のアプリケーションを使っているので、区別します。

導入 VisualStudio2022編

まずVisualStudio2022をインストールします
https://visualstudio.microsoft.com/ja/downloads/


左のコミュニティ(無料版)で大丈夫です。

これをダウンロードしたら、次は「.NET デスクトップ開発」をインストールします。

できたら、新しいプロジェクトの作成に「Windows フォームアプリ」があるので、それを実行します。

プロジェクト名とかは適当でいいです

フレームワークは.NET 8.0で

すると、こんな感じの画面が表示されます。おめでとう。

しかしこれだけだとSQL側が未設定なので、ソリューションを右クリック→ソリューションのNuGetパッケージの管理を行います。
そこで、参照の検索に、Microsoft.Data.SqlClientと書いて、それをインストールしてください。

これでVisualStudio2022側のセットアップは終了

導入 SSMS編

こちらから、SSMSのダウンロードを行います。
https://learn.microsoft.com/ja-jp/ssms/release-notes-21

ダウンロードしたインストーラを開くと、こんな画面になりますので、SSMSをインストールしてください。

SSMSがインストール出来たら、それを開いてください。

サーバ接続の画面が見えますが、まだサーバ自体を導入していないため、参照できるサーバが無いと思います。ここで一旦SSMSはストップ。

次に、Microsoft SQL Server のダウンロードを行います。
こちらはサーバそのものであり、サーバに対する操作を行うSSMSとは別物です。

バージョンはEXPRESS版で大丈夫です。
https://www.microsoft.com/ja-jp/sql-server/sql-server-downloads

ダウンロードが完了するとこんな画面になります。

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サーバが連携出来た人がいたなら幸いです。
https://zenn.dev/nbs_tokyo/articles/e540e70a19c11e
出来たらぜひ、こちらの実践編にも挑戦してみてください。

ネイバーズ東京

Discussion