.NET ヘルプ

Sqlite C# .NET(開発者向けの仕組み)

ジョルディ・バルディア
ジョルディ・バルディア
2024年1月14日
共有:

SQLiteは、さまざまなデータアクセスアプリケーションおよび環境プラットフォームで広く使用されている、人気のある、軽量で自己完結型のリレーショナルデータベースエンジンです。 .NET開発の文脈において、SQLiteソースコードは、信頼性の高いデータベースソリューションコントロールをシステムアプリケーションに統合するための優れた選択肢となります。 この記事では、SQLiteトランザクションの世界を探求し、その機能、利点、および.NETプロジェクトでの効果的な使用方法について詳しく説明します。

C#でSQLiteを使用する方法

  1. SQLiteライブラリをダウンロード

  2. データベースを作成し、データを挿入します

  3. リーダーを使用して読み取る

  4. Entity FrameworkおよびLINQクエリメソッドを使用してSQLiteを利用する

  5. 次のツールを使用してPDFレポートを生成IronPDF

SQLiteとは何ですか?

SQLiteは、別のサーバーコンポーネントを必要とせずにアプリケーションに組み込むことができる人気のあるオープンソースのデータベースエンジンです。 それは高速で、信頼性が高く、クロスプラットフォーム対応です。 SQLiteは、ADO.NETインターフェースを提供するさまざまなライブラリを通じて、.NETプロジェクトアプリケーションで使用できます。 これらのライブラリの一つはMicrosoft.Data.SQLite. これにより、SQLite を .NET アプリケーションのデータソースとして使用することができます。アプリケーションの種類はコンソール、デスクトップ、ウェブ、モバイルのいずれであっても問題ありません。また、Entity Framework Core を使用してオブジェクト-リレーショナルマッピングを実行し、LINQ を使って SQLite データベースにクエリを実行することもできます。

この記事では、.NETコンソールアプリケーションでSQLiteを開発、接続、および操作するために Microsoft.Data.Sqlite を使用する方法を紹介します。 次のことを学びます:

  • Microsoft.Data.Sqlite NuGet パッケージをインストールする
  • SQLite接続を作成し、SQLコマンドを実行する
  • データリーダーとパラメーターを使用してテーブルを作成および入力する
  • データリーダーを使用してデータをクエリする
  • エンティティフレームワーク コアの実装
  • LINQを使用してデータをクエリする
  • PDFレポートを生成

SQLiteライブラリのインストール

Microsoft.Data.Sqliteを使用するには、ライブラリとその依存関係を含むNuGetパッケージをインストールする必要があります。 Visual Studioパッケージマネージャー、.NET Core CLI、またはNuGetをサポートするその他のツールを使用してこれを行うことができます。 この記事では、パッケージマネージャーを使用してコンソールアプリケーションを作成し、Microsoft.Data.Sqliteをインストールします。これを行うには、パッケージマネージャーコンソールを開き、以下のコマンドを実行します。

Install-Package Microsoft.Data.Sqlite

上記のコマンドは、以下のようにパッケージをインストールします。

SQLiteデータベースの作成

SQLiteデータベースを扱うには、データベースファイルへの接続を表すSQLiteConnectionオブジェクトを作成する必要があります。接続にはファイル名やその他のオプションを指定することができます。 ファイルが存在しない場合、自動的に作成されます。 例えば、以下のプログラムは現在のディレクトリ内にあるemployee.dbという名前のデータベースファイルへの接続を作成します:

using (var connection = new SqliteConnection("Data Source=employee.db"))
{
  connection.Open();
  // ...
}
using (var connection = new SqliteConnection("Data Source=employee.db"))
{
  connection.Open();
  // ...
}

using 文は、接続がスコープを外れるときに閉じられ、破棄されることを保証します。 SQLコマンドを実行するには、SQLiteCommandオブジェクトを作成し、接続と関連付ける必要があります。 コマンドテキストプロパティに実行したいSQL文を設定し、オプションでパラメーターコレクションにパラメーターを追加できます。 次に、コマンドを実行するために、SQLiteCommandオブジェクトのメソッドのいずれか(ExecuteNonQuery、ExecuteScalar、またはExecuteReader)を呼び出すことができます。

SQLiteでテーブルを作成

以下のコードは、ExecuteNonQueryメソッドを使用してEmployeeという名前のテーブルを作成します:

using (var connection = new SqliteConnection("Data Source=employee.db"))
{
    connection.Open();
    var command = connection.CreateCommand();
    command.CommandText = @" CREATE TABLE Employee (
        Id INTEGER PRIMARY KEY,
        FirstName TEXT NOT NULL,
        LastName TEXT NOT NULL,
        DESIGNATION TEXT NOT NULL )";
    command.ExecuteNonQuery();
}
using (var connection = new SqliteConnection("Data Source=employee.db"))
{
    connection.Open();
    var command = connection.CreateCommand();
    command.CommandText = @" CREATE TABLE Employee (
        Id INTEGER PRIMARY KEY,
        FirstName TEXT NOT NULL,
        LastName TEXT NOT NULL,
        DESIGNATION TEXT NOT NULL )";
    command.ExecuteNonQuery();
}

テーブルにデータを挿入

テーブルにデータを挿入するには、同じSQLiteCommandオブジェクトを使用し、CommandTextプロパティをINSERT文に設定することができます。 例えば、次のコードはEmployeeテーブルに3行を挿入します。

using (var connection = new SqliteConnection("Data Source=employee.db"))
{
    var command = connection.CreateCommand();
    StringBuilder builder = new StringBuilder();
    builder.Append("INSERT INTO Employee VALUES(1, 'John', 'Sami', 'CEO');");
    builder.Append("INSERT INTO Employee VALUES(2, 'David', 'Watson', 'Software Engineer');");
    builder.Append("INSERT INTO Employee VALUES(3, 'Victor', 'Khan', 'Content Writer');");
    connection.Open();
    command.CommandText = builder.ToString();
    command.ExecuteNonQuery();
}
using (var connection = new SqliteConnection("Data Source=employee.db"))
{
    var command = connection.CreateCommand();
    StringBuilder builder = new StringBuilder();
    builder.Append("INSERT INTO Employee VALUES(1, 'John', 'Sami', 'CEO');");
    builder.Append("INSERT INTO Employee VALUES(2, 'David', 'Watson', 'Software Engineer');");
    builder.Append("INSERT INTO Employee VALUES(3, 'Victor', 'Khan', 'Content Writer');");
    connection.Open();
    command.CommandText = builder.ToString();
    command.ExecuteNonQuery();
}

SQLiteからデータを読み取る

テーブルからデータを読み取るには、SQLiteCommandオブジェクトのExecuteReaderメソッドを使用し、CommandTextプロパティにSELECTステートメントを設定します。 これはSQLiteDataReaderオブジェクトを返し、行を反復処理し、列名またはインデックスで値にアクセスすることを可能にします。 次の行に移動するためにはReadメソッドを使用し、適切なデータ型として値を取得するためにはGetXXXメソッドを使用できます。 例えば、次のコードは Employee テーブルからすべての行を読み取り、コンソールに出力します:

using (var connection = new SqliteConnection("Data Source=employee.db"))
{
    var command = connection.CreateCommand();
    command.CommandText = @"SELECT * FROM Employee";
    connection.Open();
    using (var reader = command.ExecuteReader())
    {
        while (reader.Read())
        {
            var id = reader.GetInt32(0);
            string firstName = reader.GetString(1);
            string lastName = reader.GetString(2).ToString();
            string designation = reader.GetString(3).ToString();
            Console.WriteLine($"{id}: {firstName} - {lastName} - {designation}");
        }
    }
}
using (var connection = new SqliteConnection("Data Source=employee.db"))
{
    var command = connection.CreateCommand();
    command.CommandText = @"SELECT * FROM Employee";
    connection.Open();
    using (var reader = command.ExecuteReader())
    {
        while (reader.Read())
        {
            var id = reader.GetInt32(0);
            string firstName = reader.GetString(1);
            string lastName = reader.GetString(2).ToString();
            string designation = reader.GetString(3).ToString();
            Console.WriteLine($"{id}: {firstName} - {lastName} - {designation}");
        }
    }
}

出力

このコードの出力は:

Sqlite C# .NET(開発者のための仕組み):図1 - 出力

データのクエリ

SQLiteデータベースへのクエリにLINQを使用することを好む場合は、Entity Framework Coreを使用してテーブルをクラスにマッピングし、LINQ式を使用してクエリを実行できます。 これを行うには、Microsoft.Data.Sqliteパッケージに依存するMicrosoft.EntityFrameworkCore.Sqliteパッケージをインストールする必要があります。 データベースコンテキストを表すDbContextを継承するクラスも作成する必要があります。 このクラスは、DbContextOptionsパラメータを受け取り、それを基底コンストラクターに渡すコンストラクターを持たなければなりません。 マッピングしたいクラスごとにテーブルに対応するDbSetプロパティも必要です。 例えば、以下のコードはStockクラスとDatabaseContextクラスを定義します:

using Microsoft.EntityFrameworkCore;
public class Stock
{
    public int Id { get; set; }
    public string Name { get; set; } = string.Empty;
    public string Symbol { get; set; } = string.Empty;
    public double Price { get; set; }
}
public class DatabaseContext : DbContext
{
    public DatabaseContext(DbContextOptions options) : base(options) { }
    public DbSet<Stock> Stock { get; set; }
}
using Microsoft.EntityFrameworkCore;
public class Stock
{
    public int Id { get; set; }
    public string Name { get; set; } = string.Empty;
    public string Symbol { get; set; } = string.Empty;
    public double Price { get; set; }
}
public class DatabaseContext : DbContext
{
    public DatabaseContext(DbContextOptions options) : base(options) { }
    public DbSet<Stock> Stock { get; set; }
}

データベースコンテキストを作成するには、DbContextOptionsBuilder クラスを使用し、接続文字列とデータベースプロバイダーを指定する必要があります。 次のコードはデータベース コンテキストとデータベースを作成します。次のように、データベースとテーブルが存在しない場合は、Database.EnsureCreated メソッドを使用してそれらを作成することもできます。

public class MyDbContext : DbContext
{
    public DbSet<MyEntity> MyEntities { get; set; }
}

using (var context = new MyDbContext())
{
    // Ensure the database and tables are created if they do not exist
    context.Database.EnsureCreated();
}
public class MyDbContext : DbContext
{
    public DbSet<MyEntity> MyEntities { get; set; }
}

using (var context = new MyDbContext())
{
    // Ensure the database and tables are created if they do not exist
    context.Database.EnsureCreated();
}
var optionsBuilder = new DbContextOptionsBuilder<DatabaseContext>();
  optionsBuilder.UseSqlite("Data Source=stock.db");
  using (var context = new DatabaseContext(optionsBuilder.Options))
  {
      context.Database.EnsureCreated();
  }
var optionsBuilder = new DbContextOptionsBuilder<DatabaseContext>();
  optionsBuilder.UseSqlite("Data Source=stock.db");
  using (var context = new DatabaseContext(optionsBuilder.Options))
  {
      context.Database.EnsureCreated();
  }

データベースにデータを挿入するには、DbSetプロパティのAddまたはAddRangeメソッドを使用し、挿入したいオブジェクトを渡すことができます。 変更をデータベースにコミットするには、SaveChangesメソッドも使用できます。 例えば、次のコードは3つの株式をデータベースに挿入します:

static void Main(string [] args)
{
    var optionsBuilder = new DbContextOptionsBuilder<DatabaseContext>();
    optionsBuilder.UseSqlite("Data Source=stock.db");
    using (var context = new DatabaseContext(optionsBuilder.Options))
    {
        context.Database.EnsureCreated();
        var stock = new List<Stock> {
        new Stock { Id = 1, Name = "NCR" , Symbol = "$$", Price = 5.6 },
        new Stock { Id = 2, Name = "Google" , Symbol = "GG", Price = 10.6 },
        new Stock { Id = 3, Name = "Apple" , Symbol = "AA", Price = 3.6 }
        };
        context.AddRange(stock);
        context.SaveChanges();
    }
}
static void Main(string [] args)
{
    var optionsBuilder = new DbContextOptionsBuilder<DatabaseContext>();
    optionsBuilder.UseSqlite("Data Source=stock.db");
    using (var context = new DatabaseContext(optionsBuilder.Options))
    {
        context.Database.EnsureCreated();
        var stock = new List<Stock> {
        new Stock { Id = 1, Name = "NCR" , Symbol = "$$", Price = 5.6 },
        new Stock { Id = 2, Name = "Google" , Symbol = "GG", Price = 10.6 },
        new Stock { Id = 3, Name = "Apple" , Symbol = "AA", Price = 3.6 }
        };
        context.AddRange(stock);
        context.SaveChanges();
    }
}

データをクエリするには、DbSetプロパティに対してLINQメソッドまたは式を使用し、フィルタリング、プロジェクション、集計、その他の操作を適用することができます。 クエリはSQLステートメントに変換され、データベースで実行されます。 例えば、次のコードは価格が6ドル未満の株をクエリして、その名前を印刷します:

using (var context = new DatabaseContext(optionsBuilder.Options))
{
    var cheapStocks = context.Stock.Where(p => p.Price < 6).Select(p => p.Name);
    Console.WriteLine("Stock Less than $6 are:");
    foreach (string stock in cheapStocks)
    {
        Console.WriteLine(stock);
    }
}
using (var context = new DatabaseContext(optionsBuilder.Options))
{
    var cheapStocks = context.Stock.Where(p => p.Price < 6).Select(p => p.Name);
    Console.WriteLine("Stock Less than $6 are:");
    foreach (string stock in cheapStocks)
    {
        Console.WriteLine(stock);
    }
}

例えば、株式のリストを含むPDFファイルを作成する必要があるシナリオを考えましょう。 IronPDFを使用することで簡単にそれを行うことができます。

IronPDFの紹介

IronPDFは.NETアプリケーションで複数のパッケージを必要とせずにPDFファイルを作成、編集、読み込みできるライブラリです。 HTML、URL、JavaScript、CSS、多くの画像フォーマットからPDFを生成し、ヘッダー、フッター、署名、添付ファイル、パスワードを追加することができます。 また、クロスプラットフォーム互換性、マルチスレッディング、および非同期サポートもサポートしています。

IronPDFのHTMLからPDFへの機能はその主なハイライトであり、すべてのレイアウトとスタイルを保持します。 それはウェブコンテンツからPDFを生成します。レポート、請求書、およびドキュメントに最適です。 HTMLファイル、URL、およびHTML文字列をシームレスにPDFに変換できます。

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}

IronPDF をインストール

プロジェクトにIronPDFをインストールするには、パッケージ マネージャー コンソールに次のコマンドを入力します。

Install-Package IronPdf

このコマンドはIronPDFとそのすべての依存関係をインストールします。

ライセンスキーを追加

IronPDFの使用にはライセンスキーが必要です。 以下から簡単に試用ライセンスキーを取得できますIronPDFトライアルライセンスページ.

アプリケーションのスタートアップに、このコードをIronPDFを使用する前に追加してください。 このアプローチは効果的であり、普遍的かつ簡単です。 それは .NET Core および .NET Framework アプリケーションの両方で動作します。

IronPdf.License.LicenseKey = "IRONSUITE.ABC.XYZ.MYCOMPANY.COM.ABC-DEPLOYMENT.TRIAL-P45MXL.TRIAL.EXPIRES.31.JAN.2028";
IronPdf.License.LicenseKey = "IRONSUITE.ABC.XYZ.MYCOMPANY.COM.ABC-DEPLOYMENT.TRIAL-P45MXL.TRIAL.EXPIRES.31.JAN.2028";

在庫リストを含むPDFファイルの作成

このC#コードは、SQLiteデータベースに保存された在庫データからPDFレポートを生成します。 それは動的にHTMLテーブルを作成し、株情報でテーブルを埋めて、ChromeベースのPDFレンダラーを使用してテーブルをダウンロード可能な「stock.pdf」ファイルに変換し、株の詳細の効率的な報告と配布を可能にします。

var optionsBuilder = new DbContextOptionsBuilder<DatabaseContext>();
optionsBuilder.UseSqlite("Data Source=stock.db");
StringBuilder builder = new StringBuilder();
string style = "<!DOCTYPE html>\r\n<html>\r\n<head>\r\n<style>\r\n#stock {\r\n  font-family: Arial, Helvetica, sans-serif;\r\n  border-collapse: collapse;\r\n  width: 100%;\r\n}\r\n\r\n#stock td, #stock th {\r\n  border: 1px solid #ddd;\r\n  padding: 8px;\r\n}\r\n\r\n#stock tr:nth-child(even){background-color: #f2f2f2;}\r\n\r\n#stock tr:hover {background-color: #ddd;}\r\n\r\n#stock th {\r\n  padding-top: 12px;\r\n  padding-bottom: 12px;\r\n  text-align: left;\r\n  background-color: #04AA6D;\r\n  color: white;\r\n}\r\n</style>\r\n</head>\r\n<body>\r\n\r\n<h1>A Stock Table</h1>";
builder.Append(style);
builder.Append("<table id=\"stock\"><tr><td>Stock Symbol</td><td>Stock Name</td><td>Stock Price</td></tr>");
using (var context = new DatabaseContext(optionsBuilder.Options))
{
    var stocks = context.Stock;
    foreach (Stock stock in stocks)
    {
        builder.Append($"<tr><td>{stock.Symbol}</td><td>{stock.Name}</td><td>{stock.Price}</td></tr>");
    }
}
builder.Append("</table></body></html>");
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(builder.ToString());
pdf.SaveAs("stock.pdf");
var optionsBuilder = new DbContextOptionsBuilder<DatabaseContext>();
optionsBuilder.UseSqlite("Data Source=stock.db");
StringBuilder builder = new StringBuilder();
string style = "<!DOCTYPE html>\r\n<html>\r\n<head>\r\n<style>\r\n#stock {\r\n  font-family: Arial, Helvetica, sans-serif;\r\n  border-collapse: collapse;\r\n  width: 100%;\r\n}\r\n\r\n#stock td, #stock th {\r\n  border: 1px solid #ddd;\r\n  padding: 8px;\r\n}\r\n\r\n#stock tr:nth-child(even){background-color: #f2f2f2;}\r\n\r\n#stock tr:hover {background-color: #ddd;}\r\n\r\n#stock th {\r\n  padding-top: 12px;\r\n  padding-bottom: 12px;\r\n  text-align: left;\r\n  background-color: #04AA6D;\r\n  color: white;\r\n}\r\n</style>\r\n</head>\r\n<body>\r\n\r\n<h1>A Stock Table</h1>";
builder.Append(style);
builder.Append("<table id=\"stock\"><tr><td>Stock Symbol</td><td>Stock Name</td><td>Stock Price</td></tr>");
using (var context = new DatabaseContext(optionsBuilder.Options))
{
    var stocks = context.Stock;
    foreach (Stock stock in stocks)
    {
        builder.Append($"<tr><td>{stock.Symbol}</td><td>{stock.Name}</td><td>{stock.Price}</td></tr>");
    }
}
builder.Append("</table></body></html>");
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(builder.ToString());
pdf.SaveAs("stock.pdf");

上記のC#コードスニペットは、SQLiteデータベースから株情報を表示するHTMLテーブルを作成し、それをPDFファイルに変換するように設計されています。データベースと対話するためにEntity Framework Coreライブラリを使用しています。 最初に、特定の接続文字列でSQLiteを使用するようにDbContextOptionsBuilderを設定します。 コードはまず、テーブルの外観に使用するCSSスタイルを埋め込んだHTML文字列を構築し、ヘッダー付きのテーブル構造を作成します。次に、SQLiteデータベースから在庫情報をクエリし、取得したデータでHTMLテーブルを埋め、最後にChromeベースのPDFレンダラーを使用してHTMLコンテンツを「stock.pdf」という名前のPDFファイルに変換します。生成されるPDFには、株式のシンボル、名称、および価格が表示されるテーブルが含まれます。

出力としては

SQLite C# .NET(開発者のための動作方法):図2 - ストックテーブル出力

結論

結論として、.NETでSQLiteを使用してデータベース管理を行うことにより、軽量で多用途なソリューションを提供します。 この記事では、SQLiteを.NETアプリケーションに統合することを探り、その主な機能と利点を紹介しました。 提供されたコードは、.NETコンソールアプリケーションにおいて、SQLiteデータベースの作成、接続、および操作の実際的な手順を示しています。 さらに、データ処理の効率化のために Microsoft.Data.Sqlite と Entity Framework Core を使用することが強調されました。 IronPDFの組み込みは、シームレスにどのようにPDF レポートを生成するSQLiteデータベースから、アプリケーションの報告およびデータ配布機能を強化します。

IronPDFは様々なライセンスオプション開発者の数、場所、プロジェクト、および再配布のニーズによって異なります。 ライセンスは永久的であり、1年間の無料サポートと更新が含まれています。

ジョルディ・バルディア
ソフトウェアエンジニア
ジョルディは、Iron Softwareでのスキルを活かしていないときには、ゲームプログラミングをしており、Python、C#、C++に最も堪能です。彼は製品テスト、製品開発、研究の責任を共有しており、継続的な製品改善に大きな価値をもたらしています。この多様な経験は彼を常に挑戦的で魅力的に保ち、彼はIron Softwareで働く一番好きな側面の一つだと言っています。ジョルディはフロリダ州マイアミで育ち、フロリダ大学でコンピューターサイエンスと統計学を学びました。
< 以前
C# 二重疑問符(開発者向けの仕組み)
次へ >
Datatables .NET(開発者向けの動作方法)