本文へスキップ
BecomeCoder

C#実践コース · 第5章 代表的なSDK · レッスン26

ADO.NET ― DB接続の基本操作(ローカル実施)

ローカル実施
スターターをダウンロード(.zip)

導入

次に学ぶEF Coreは、DB操作をdb.Books.Where(...)のLINQ一行にしてくれます。便利すぎて中身が見えなくなる前に、その土台であるADO.NET——最も基礎的なDBアクセスAPI——で「接続→SQL実行→結果読み取り→切断」の一連を自分の手で書きます。

図解

sequenceDiagram
    participant App as C♯アプリ
    participant Conn as SqliteConnection
    participant DB as データベース
    App->>Conn: 接続文字列で生成 → Open()
    App->>Conn: Command(SQL)
    App->>Conn: ExecuteReader / ExecuteNonQuery
    Conn->>DB: SQL実行
    DB-->>Conn: 結果
    Conn-->>App: Reader で1行ずつ読む
    App->>Conn: Dispose(using で自動)

進め方

  1. スターター110-ado-net/starter.zipを展開し、AdoNetLesson.slnを開く(Microsoft.Data.Sqlite導入済み)
  2. Program.csのTODOを埋める
  3. 期待される出力と照合する
Visual StudioでADO.NETのProgram.csを実行し、SELECT結果がコンソールに1行ずつ表示された様子
実行結果:SQLの実行結果を Reader で1行ずつ出力

学ぶこと

using Microsoft.Data.Sqlite;

using var connection = new SqliteConnection("Data Source=lesson.db");
connection.Open();

// テーブル作成・データ挿入(ExecuteNonQuery)
using (var cmd = connection.CreateCommand())
{
    cmd.CommandText = "INSERT INTO Books (Title, Price) VALUES ($t, $p)";
    cmd.Parameters.AddWithValue("$t", "C#入門");   // パラメータ化でSQLインジェクション対策
    cmd.Parameters.AddWithValue("$p", 2400);
    cmd.ExecuteNonQuery();
}

// 結果を読む(ExecuteReader)
using var select = connection.CreateCommand();
select.CommandText = "SELECT Title, Price FROM Books ORDER BY Price";
using var reader = select.ExecuteReader();
while (reader.Read())
    Console.WriteLine($"{reader.GetString(0)}: {reader.GetInt32(1)}円");
  • 骨格は「接続文字列OpenCommandExecuteReadDispose(using)」の一本道
  • 値は必ずパラメータ化$tAddWithValue)してSQLインジェクションを防ぐ
  • ExecuteNonQueryは行を返さないSQL、ExecuteReaderはSELECT結果を1行ずつ読む
  • EF CoreはこのConnection/Command/ReaderをLINQの裏で自動生成している

期待される出力

C#入門: 2400円
実践DDD: 3800円

まとめ

  • ADO.NETの骨格は接続→SQL→読み取り→切断(using)の一本道
  • SQLへの値埋め込みは必ずパラメータ化
  • EF Coreの土台を理解できる

次回: LINQでDBを扱うEF Coreです。

テンプレート構成(教材制作用メモ)

110-ado-net/
├── starter.zip   # Microsoft.Data.Sqlite導入済み / Program.cs(TODO入り)
└── solution/Program.cs