記事詳細


投稿日
2025年11月13日21時20分
タイトル

ASP.NET MVC で KamokuImage をデータベースから取得する

内容

Entity Framework を使うのがシンプルで安全です。

以下は Entity Framework (Code First / Database First どちらでも可) を想定した完全な例です。

Csharp
using System; using System.Linq; using System.Data.Entity; // EF6の場合 using YourAppNamespace.Models; // KamokuモデルとDbContextの名前空間 public class KamokuController : Controller { // DbContext のインスタンス private readonly ApplicationDbContext _context; public KamokuController() { _context = new ApplicationDbContext(); } /// <summary> /// 指定された KamokuId の画像データを取得します。 /// </summary> /// <param name="id">KamokuId</param> /// <returns>画像のバイト配列。存在しない場合は null。</returns> private byte[] GetImageFromDatabase(int id) { try { if (id <= 0) return null; // 無効なIDは処理しない // データベースから画像を取得 var kamoku = _context.Kamokus .Where(k => k.KamokuId == id) .Select(k => k.KamokuImage) .FirstOrDefault(); return kamoku; // null の可能性あり } catch (Exception ex) { // ログ出力(例: NLog, Serilog, etc.) System.Diagnostics.Debug.WriteLine($"DB取得エラー: {ex.Message}"); return null; } } // 画像を返すアクション例 public ActionResult ShowImage(int id) { var imageData = GetImageFromDatabase(id); if (imageData == null) return HttpNotFound(); return File(imageData, "image/jpeg"); // 画像形式に応じて変更 } protected override void Dispose(bool disposing) { if (disposing) { _context.Dispose(); } base.Dispose(disposing); } }

補足

  1. DbContext 定義例

    Csharp
    public class ApplicationDbContext : DbContext { public DbSet<Kamoku> Kamokus { get; set; } } public class Kamoku { public int KamokuId { get; set; } public string KamokuName { get; set; } public byte[] KamokuImage { get; set; } }
  2. ポイント

    • Select(k => k.KamokuImage) で必要な列だけ取得するため、無駄なデータを読み込まない。
    • FirstOrDefault() で該当データがない場合は null を返す。
    • 例外処理を入れて安全に動作。
    • 画像返却時は File(byte[], contentType) を使う。

Powered by Froala Editor

添付画像

画像はありません
Genreのカテゴリ-名
Controllers
編集 | 記事一覧