C#でSQL Server (LocalDB)に接続する方法についてまとめました。
操作はVisual Studioだけで完結するので、別途SQL Serverをインストールする必要はありません。
LocalDBとは?
無償で使えるSQL Server Expressの開発者向けバージョンです。
Visual Studio Installerで特定のワークロードを選択すると簡単にインストールすることができます(インストール方法は後述)
環境
- Visual Studio 2022
- .NET 8
準備(Local DBの追加)
※既にVisual Studio 2022のワークロードに「ASP.NETとWeb開発」や「Azure の開発」が追加されている場合はこの手順は不要です。
まず初めにワークロードを追加します。スタートメニューからVisual Studio Installerを起動します。
変更をクリック。
ワークロードの選択画面が出るので、「ASP.NETとWeb開発」(または「Azure の開発」)にチェックを入れ、「変更」ボタンを押します。
これでLocalDBがインストールされます。
Visual Studioでデータベースとテーブルを作成
Visual Studio上でLocalDBにデータベースとテーブルを作成する方法を解説します。
プロジェクトの作成
Visual Studioを起動して新しいプロジェクトを作成します。
今回はコンソールアプリを選択します。
プロジェクト名は「SqlServerApp」にしました。
他の設定はデフォルトのままでOKです。
全てデフォルトのままで「作成」をクリックします。
デザイナー(GUI)によるデータベースとテーブルの作成
プロジェクトが作成されたら、「表示」→「SQL Server オブジェクトエクスプローラー」を開きます。
「SQL Server オブジェクトエクスプローラー」が表示されたら、
「(localdb)¥MSSQLLocalDB」直下の「データベース」フォルダを右クリックして、「新しいデータベースの追加」をクリックします。
※もし一覧に「(localdb)¥MSSQLLocalDB」が表示されない場合は、「SQL Serverの追加」アイコンから「MSSQLLocalDB」を選んで接続してみてください。
データベース名はなんでも大丈夫ですが、今回は「testdb」としてみます。
「testdb」が作成されたら、次はテーブルを作成します。
testdb内の「テーブル」フォルダを右クリックして「新しいテーブルの追加」をクリックします。
テーブルの定義を設定するデザイナー画面が表示されます。
今回は簡易的に、Id・Name・Age・Birthdayの4列からなる「Test」というテーブルを作成します。
テーブル名は画面下「T-SQL」タブの[dbo].[○○]から変更できます。
入力できたら左上の「更新」をクリックしましょう。
プレビュー画面が表示されるので、問題なければ「データベースの更新」をクリックします。
オブジェクトエクスプローラー左上の更新矢印ボタンをクリックすると、作成されたテーブルが反映されるはずです。
次はデータを登録します。「dbo.Test」テーブルを右クリックして「データの表示」をクリックしましょう。
3件ほどテストデータを追加します。これでテーブルの準備が整いました。
【参考】SQLによるテーブル作成とデータの追加方法
今回はデザイナーを使用してテーブルの作成やデータの追加を行いましたが、以下のSQLでまとめて実行することも可能です。
CREATE TABLE [dbo].[Test] (
[Id] INT NOT NULL PRIMARY KEY,
[Name] NVARCHAR(50) NULL,
[Age] INT NULL,
[Birthday] DATE NULL
)
INSERT INTO Test VALUES( 1, N'一郎', 25, '1996-08-31')
INSERT INTO Test VALUES( 2, N'次郎', 40, '1981-12-12')
INSERT INTO Test VALUES( 3, N'花子', 18, '2003-04-01')
SQLを実行するには、DB名を右クリックして「新しいクエリ」を選択し、
表示されたウィンドウにSQLを入力して左上の実行ボタンを押せばOKです。
接続文字列の確認
最後にDBに接続するための情報を取得します。
「testdb」を右クリックして「プロパティ」をクリックします。
右下の方にプロパティが表示されるので、「接続文字列」という列を探し、表示されている値を文字列をメモ帳等にコピペしておきましょう。
これで準備は完了です。
C#でLocalDBに接続してSELECT文を実行する
それではLocalDBに接続して、情報を取得してみましょう。
まずSQL Serverへの接続や操作に必要なパッケージをインストールします。
ソリューションエクスプローラーでプロジェクト名を右クリックし、「NuGetパッケージの管理」をクリックします。
左上の「参照」タブを開いて「sqlclient」と検索し、表示された「Microsoft.Data.SqlClient」をインストールしましょう。
インストールができたら、LocalDBに接続する準備は完了です。
Program.csに以下のコードを書いて実行すると、テーブル内容がすべて取得できます。
※.NET 6 以降の最上位レベルのステートメントを使っています。下記コードをProgram.csに貼り付けるだけで実行可能です。
using Microsoft.Data.SqlClient;
// 先ほどコピーした接続文字列を貼り付ける
var connectionString = @"Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=testdb;Integrated Security=True;Connect Timeout=30;Encrypt=False;Trust Server Certificate=False;Application Intent=ReadWrite;Multi Subnet Failover=False";
// 実行するSQL
var sql = "SELECT * FROM Test";
// 接続のためのオブジェクトを生成
// 実行後にオブジェクトのCloseが必要なためusing文で囲う
using (var connection = new SqlConnection(connectionString))
{
// 接続を確立
connection.Open();
// SqlCommand:DBにSQL文を送信するためのオブジェクトを生成
// SqlDataReader:読み取ったデータを格納するためのオブジェクトを生成
using (var command = new SqlCommand(sql, connection))
using (var reader = command.ExecuteReader())
{
// 1行ごとに読み取る
while (reader.Read())
{
// 列名を指定して、読み取ったデータをコンソール上に表示
Console.WriteLine($"Name:{reader["Name"]} Age:{reader["Age"]} Birthday:{reader["Birthday"]}");
}
}
}
Ctrl + F5でデバッグなしで実行し、コンソール上にSELECT文の結果が表示されれば成功です。
SELECT文の内容を変更して、結果が変わることを試してみてください。
おわりに
以上、SQL ServerのLocalDBに接続してSELECT文を実行する方法を解説しました。
INSERT・UPDATE・DELETE文を実行する方法については以下で解説しています。
O/Rマッパーの「Entity Framework Core」を使ってSQL Serverを操作する方法が知りたい場合は、以下の記事を参照してください。
今回使用したSqlConnectionやSqlCommand等の使い方や仕組みについてさらに詳しく知りたい方は、以下の書籍が参考になります。