C#
C#側との連携— DataReaderでクライアント側ループに寄せる選択肢
出典: SQL Server のカーソルを使うべきタイミングと書き方(業務SE現場の判断軸) — C#側との連携— DataReaderでクライアント側ループに寄せる選択肢
// ✅ C#側でループする(DataReader版)
using (var conn = new SqlConnection(_connectionString))
using (var cmd = new SqlCommand("SELECT id, name FROM target_table WHERE status = 0", conn))
{
conn.Open();
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
var id = reader.GetInt32(0);
var name = reader.GetString(1);
// 1行ごとに別APIを叩く・整形する等の手続き処理
await ExternalApi.NotifyAsync(id, name);
}
}
}
▸ この snippet は実行結果未収録
▸ 実行結果は未収録です
Source収録記事
この snippet は記事の「C#側との連携— DataReaderでクライアント側ループに寄せる選択肢」セクションに登場する。コードの前後の文脈・ハマりどころの解説は記事本文で。
同じ記事から
6 件-- ❌アンチパターン:カーソルで1行ずつUPDATE DECLARE @id INT, @flag CHAR(1); DECLARE c CURSOR FOR SELECT id, flag FROM target_table WHERE status = 0; OPEN c;未収録
1.一括UPDATE / INSERT
#2a730dcef025
-- ❌カーソル+変数累積 DECLARE @total DECIMAL(18,2)= 0; -- ...カーソル省略... SET @total = @total + @amount;
▶ 実行可
2.集計(SUM / COUNT / AVG)
#003642727eff
-- ✅ウィンドウ関数で一発 SELECT customer_id, purchase_date,
▶ 実行可
3.ランキング(ROW_NUMBER / RANK)
#26525d4eb78c
-- ✅ CASE WHEN一発 UPDATE customer_master SET grade = CASE WHEN total_amount >= 1000000 THEN 'A'未収録
5.条件分岐UPDATE
#dae92f20fbdd
-- ✅カーソル基本テンプレ DECLARE @table_name SYSNAME; DECLARE @sql NVARCHAR(MAX);
▶ 実行可
カーソルの正しい書き方(DECLARE〜DEALLOCATEのテンプレ)
#50ab94bf4bc6
-- ❌重いデフォルト(GLOBAL / KEYSET /更新可能) DECLARE c CURSOR FOR SELECT id FROM big_table; -- ✅軽量カーソル(LOCAL / FAST_FORWARD / READ_ONLY)未収録
性能落とし穴— FAST_FORWARD READ_ONLY LOCALの意味
#4a5ae3f957e0
