今回は初心者の方向けに、C#でSQL Server Express LocalDBに接続する方法についてまとめました。
操作はVisual Studio 2019だけで完結するので、SQL Serverのインストールは不要です。
※LocalDBとは?
Visual Studioと一緒にインストールされる必要最低限の機能を備えたSQL Serverです。
学習用に色々触ってみたい場合に適しています。
環境
- Windows10
- Visual Studio Community 2019
- .NET Framework 4.8
準備(LocalDBの追加)
※既にVisual Studio 2019のワークロードに「ASP.NETとWeb開発」が追加されている場合はこの手順は不要です。
まず初めにワークロードを追加します。スタートメニューからVisual Studio Installerを起動します。

変更をクリック。

ワークロードの選択画面が出るので、「ASP.NETとWeb開発」(または「データの保存と処理」)にチェックを入れて「変更」ボタンを押します。

これでLocalDBがインストールされました。
Visual Studioでデータベースとテーブルを作成
プロジェクトの作成
Visual Studioを起動して新しいプロジェクトを作成します。

今回はコンソールアプリを選択します。

プロジェクト名は「DBConnectApp」にしてみます。
他の設定はデフォルトのままでOKです。

デザイナー(GUI)によるデータベースとテーブルの作成
プロジェクトが作成されたら、「表示」→「SQL Server オブジェクトエクスプローラー」を開きます。

「SQL Server オブジェクトエクスプローラー」が表示されたら、
「(localdb)¥MSSQLLocalDB」の「データベース」フォルダを右クリックして「新しいデータベースの追加」をクリックします。

※もし一覧に「(localdb)¥MSSQLLocalDB」が表示されない場合は、「SQL Serverの追加」アイコンから「MSSQLLocalDB」を選んで接続してみてください。

データベース名はなんでも大丈夫ですが、今回は「testdb」としてみます。

「testdb」が作成されました。次はテーブルを作成します。
「テーブル」フォルダを右クリックして「新しいテーブルの追加」をクリックします。

テーブルの定義を設定するデザイナー画面が表示されます。
今回は簡易的に、Id・Name・Age・Birthdayの4列からなる「Test」というテーブルを作成します。
テーブル名は画面下の[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に接続して、情報を取得してみましょう。
Program.csに以下のプログラムを書いて実行すると、テーブル内容がすべて取得できます。
using System;
using System.Data.SqlClient; // usingの追加
namespace DBConnectApp
{
class Program
{
static void Main(string[] args)
{
// 先ほどコピーした接続文字列を貼り付ける
var connectionString = @"接続文字列";
// 実行するSELECT文
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行ごとに読み取る。読み取ったらtrue
while (reader.Read())
{
// 列名を指定して、読み取ったデータをコンソール上に表示
Console.WriteLine($"" +
$"{reader["Name"]}\t\t" +
$"{reader["Age"]}\t\t" +
$"{reader["Birthday"]}");
}
}
}
}
}
}
デバッグなしで実行すると、無事コンソール上にテーブル内容が表示されました。

参考
今回使用したSqlConnectionやSqlCommandのクラスについても詳しく説明されているので、より深く学びたい人におすすめです。
コメント