導入
次に学ぶ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 で自動)
進め方
- スターター
110-ado-net/starter.zipを展開し、AdoNetLesson.slnを開く(Microsoft.Data.Sqlite導入済み) Program.csのTODOを埋める- 期待される出力と照合する
学ぶこと
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)}円");
- 骨格は「接続文字列→
Open→Command→Execute→Read→Dispose(using)」の一本道 - 値は必ずパラメータ化(
$t+AddWithValue)して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