フッターコンテンツにスキップ
.NETヘルプ

C# PostgreSQL(開発者向けの動作方法)

初心者のためにデザインされたこのチュートリアルへようこそ。PostgreSQLとのC#アプリケーション統合に興味のある方に最適です。 PostgreSQLは世界中で最も使用されているリレーショナルデータベースの1つであり、その信頼性とC#を含む多様なプログラミング環境との互換性で知られています。 このガイドでは、C#アプリケーションをPostgreSQLデータベースに接続し、SQL文のクエリを実行し、データを処理する基本について説明します。 Visual Studio、NuGetパッケージマネージャー、Npgsqlデータプロバイダーなどのツールを使用して、PostgreSQLサーバーと通信するシンプルなプロジェクトを作成します。 また、PostgreSQLの統合を行うIronPDFライブラリについても学びます。

環境のセットアップ

コーディングを始める前に、コンピュータにVisual Studioがインストールされていることを確認してください。 Visual Studioは、多くのプログラミング言語をサポートする人気の統合開発環境(IDE)で、C#をサポートしています。 データベース管理のために、ローカルマシンにPostgreSQLをインストールするか、Azure Databaseのようなクラウド環境にPostgreSQLデータベースをセットアップします。

Visual StudioとPostgreSQLサーバーを設定した後、新しいC#プロジェクトを作成してください。 Visual Studioを開き、ファイルメニューに移動し、新規作成を選択した後、プロジェクトを選びます。 プロジェクトタイプには、簡単にするためにConsole App (.NET Core) を選びます。

PostgreSQLとC#の統合

C#アプリケーションをPostgreSQLデータベースに接続するには、Npgsqlデータプロバイダーが必要です。 Npgsqlは、C#アプリケーションとPostgreSQLデータベースの間の橋渡しの役割を果たし、コードがSQLコマンドを実行し、データを管理できるようにします。

Npgsqlのインストール

新しく作成したプロジェクトをVisual Studioで開きます。 ソリューションエクスプローラーでプロジェクトを右クリックして「NuGetパッケージの管理」を選び、Npgsqlパッケージを検索します。 パッケージ名の隣にあるインストールボタンをクリックしてインストールします。 このアクションにより、Npgsqlデータプロバイダーがプロジェクトに追加され、アプリケーションがPostgreSQLと通信できるようになります。 パッケージマネージャーコンソールを使用してインストールすることもできます。

C# PostgreSQL (開発者向けガイド): 図1 - Npgsql

データベース接続の構成

C#からPostgreSQLデータベースと対話する最初のステップは接続を確立することです。 これには、サーバー名、ポート、ユーザー名、パスワードなどの詳細を含む接続文字列が必要です。 ここにPostgreSQL接続文字列の基本テンプレートがあります。

string connectionString = "Host=localhost; Port=5432; Username=postgres; Password=yourpassword; Database=mydatabase";
string connectionString = "Host=localhost; Port=5432; Username=postgres; Password=yourpassword; Database=mydatabase";
Dim connectionString As String = "Host=localhost; Port=5432; Username=postgres; Password=yourpassword; Database=mydatabase"
$vbLabelText   $csharpLabel

localhostyourpasswordmydatabaseをあなたのPostgreSQLサーバーの詳細で置き換えてください。

従業員モデルの定義

私たちは、PostgreSQLデータベースでデータを表すEmployeeエンティティモデルを定義します。 このモデルには、データベーステーブルの列に対応するプロパティが含まれています。

public class Employee
{
    public int Id { get; set; } // Automatically becomes the primary key
    public string LastName { get; set; }
}
public class Employee
{
    public int Id { get; set; } // Automatically becomes the primary key
    public string LastName { get; set; }
}
Public Class Employee
	Public Property Id() As Integer ' -  Automatically becomes the primary key
	Public Property LastName() As String
End Class
$vbLabelText   $csharpLabel

このコードスニペットは、IdLastNameの2つのプロパティを持つシンプルなEmployeeクラスを定義しています。 Entity Framework Coreは、Idシリアル主キーをプライマリキーとして扱うべきことを推測するために慣習を使用します。

アプリケーションのDbContextの構成

AppDbContextクラスは、Entity Framework CoreのDbContextを拡張し、C#アプリケーションとPostgreSQLデータベースの間の橋渡しの役割を果たします。 それには接続文字列やデータベース内のテーブルを表すDbSetプロパティなどの設定詳細が含まれています。

public class AppDbContext : DbContext
{
    public DbSet<Employee> Employees { get; set; } // Represents the Employees table

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        string connectionString = "Host=localhost; Port=5432; Username=postgres; Password=your_password; Database=your_database";
        optionsBuilder.UseNpgsql(connectionString);
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Employee>().ToTable("Employees");
    }
}
public class AppDbContext : DbContext
{
    public DbSet<Employee> Employees { get; set; } // Represents the Employees table

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        string connectionString = "Host=localhost; Port=5432; Username=postgres; Password=your_password; Database=your_database";
        optionsBuilder.UseNpgsql(connectionString);
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Employee>().ToTable("Employees");
    }
}
Public Class AppDbContext
	Inherits DbContext

	Public Property Employees() As DbSet(Of Employee) ' -  Represents the Employees table

	Protected Overrides Sub OnConfiguring(ByVal optionsBuilder As DbContextOptionsBuilder)
		Dim connectionString As String = "Host=localhost; Port=5432; Username=postgres; Password=your_password; Database=your_database"
		optionsBuilder.UseNpgsql(connectionString)
	End Sub

	Protected Overrides Sub OnModelCreating(ByVal modelBuilder As ModelBuilder)
		modelBuilder.Entity(Of Employee)().ToTable("Employees")
	End Sub
End Class
$vbLabelText   $csharpLabel
  • DbSetプロパティ: public DbSet Employees { get; set; } は、Employeeエンティティのセットを宣言し、PostgreSQLデータベース内の従業員テーブルにマッピングされます。

  • OnConfiguringメソッド: このメソッドは、必要なデータベース接続文字列でDbContextを設定します。 your_passwordyour_databaseをあなたの実際のPostgreSQLサーバーの詳細で置き換えてください。

  • OnModelCreatingメソッド: ここでは、Fluent APIを使用してエンティティの動作をさらに構成できます。 この例では、テーブル名を明示的に指定していますが、DbSetプロパティ名とテーブル名が一致する場合は省略可能です。

メインプログラムのロジック

ProgramクラスのMainメソッドでは、データベースが作成され、空の場合は初期データでシードされ、その後、クエリを実行して従業員データを取得して表示します。

class Program
{
    static void Main(string[] args)
    {
        using (var context = new AppDbContext())
        {
            context.Database.EnsureCreated();  // Ensure the database and schema are created
            if (!context.Employees.Any())  // Check if the Employees table is empty
            {
                context.Employees.Add(new Employee { LastName = "Software" });
                context.SaveChanges();  // Save changes to the database
            }
            var employees = context.Employees.Where(e => e.LastName == "Software").ToList();
            foreach (var employee in employees)
            {
                Console.WriteLine($"Employee ID: {employee.Id}, Last Name: {employee.LastName}");
            }
        }
    }
}
class Program
{
    static void Main(string[] args)
    {
        using (var context = new AppDbContext())
        {
            context.Database.EnsureCreated();  // Ensure the database and schema are created
            if (!context.Employees.Any())  // Check if the Employees table is empty
            {
                context.Employees.Add(new Employee { LastName = "Software" });
                context.SaveChanges();  // Save changes to the database
            }
            var employees = context.Employees.Where(e => e.LastName == "Software").ToList();
            foreach (var employee in employees)
            {
                Console.WriteLine($"Employee ID: {employee.Id}, Last Name: {employee.LastName}");
            }
        }
    }
}
Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Using context = New AppDbContext()
			context.Database.EnsureCreated() ' Ensure the database and schema are created
			If Not context.Employees.Any() Then ' Check if the Employees table is empty
				context.Employees.Add(New Employee With {.LastName = "Software"})
				context.SaveChanges() ' Save changes to the database
			End If
			Dim employees = context.Employees.Where(Function(e) e.LastName = "Software").ToList()
			For Each employee In employees
				Console.WriteLine($"Employee ID: {employee.Id}, Last Name: {employee.LastName}")
			Next employee
		End Using
	End Sub
End Class
$vbLabelText   $csharpLabel

上記のコードは、データベースが存在するかどうかを確認し、スキーマと共に作成されていない場合は作成します。 これは、開発中に新しいデータベースをブートストラップするための簡単な方法です。 このSQL文は、Employeesテーブルが空の場合に、プログラムが「Software」という姓の新しいEmployeeを追加し、変更をデータベースに保存するかどうかを確認します。 プログラムは、Employeesテーブルの「Software」という姓のエントリをクエリし、その詳細をコンソールに表示します。

出力

プログラムを実行するときのコンソール出力はこちらです。

C# PostgreSQL (開発者向けガイド): 図2 - 出力

そして、それがPgAdminのテーブルデータです:

C# PostgreSQL (開発者向けガイド): 図3 - テーブル出力

IronPDF の紹介

IronPDFライブラリの機能を探索して、このC#用の包括的なライブラリが.NETアプリケーション内でPDFドキュメントの作成、編集、および操作をどのように可能にするかを理解してください。 この強力なツールは、HTML、URL、および画像からPDFを生成するプロセスを簡素化します。 また、テキストや画像の編集、暗号化やデジタル署名のようなセキュリティ機能の追加など、必要なPDF操作を提供します。 IronPDFは、最小のコードで複雑なPDF機能を実装できる使いやすさで際立っています。

IronPDFはHTMLをPDFに簡単に変換する機能を提供し、レイアウトとスタイルをそのままにします。 この機能は、レポート、請求書、文書などのWebベースのコンテンツから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");
    }
}
Imports IronPdf

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim renderer = New ChromePdfRenderer()

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

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

		' 3. Convert URL to PDF
		Dim url = "http://ironpdf.com" ' Specify the URL
		Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
		pdfFromUrl.SaveAs("URLToPDF.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

IronPDFとPostgreSQLデータベースを統合することは、データベースに保存されている動的なデータに基づいてPDFレポートや文書を生成する必要があるシナリオで非常に役立ちます。 これは、PostgreSQLデータベースに永続化されたデータから直接、請求書、レポート、顧客の明細書などを生成することに関連します。

Installing IronPDF

IronPDFを使用する前に、プロジェクトに追加する必要があります。 これはNuGetパッケージマネージャーを介して簡単に行うことができます。

Install-Package IronPdf

PostgreSQLデータからPDFを生成する

この例では、PostgreSQLデータベースから従業員のリストを表示する簡単なPDFレポートを生成しましょう。 以前のセクションで説明したように、AppDbContextEmployeeモデルが設定されていることを前提とします。

最初に、プロジェクトにIronPDFライブラリがインストールされていることを確認してください。 その後、以下のコードを使用してPostgreSQLデータベースからデータを取得し、PDFレポートを生成できます。

class Program
{
    static void Main(string[] args)
    {
        IronPdf.License.LicenseKey = "Key";
        // Initialize the database context
        using (var context = new AppDbContext())
        {
            // Fetch employees from the database
            var employees = context.Employees.ToList();
            // Generate HTML content for the PDF
            var htmlContent = "<h1>Employee Report</h1>";
            htmlContent += "<table><tr><th>ID</th><th>Last Name</th></tr>";
            foreach (var employee in employees)
            {
                htmlContent += $"<tr><td>{employee.Id}</td><td>{employee.LastName}</td></tr>";
            }
            htmlContent += "</table>";
            // Instantiate the IronPDF HtmlToPdf converter
            var renderer = new ChromePdfRenderer();
            // Generate the PDF document from the HTML content
            var pdf = renderer.RenderHtmlAsPdf(htmlContent);
            // Save the generated PDF to a file
            var outputPath = "f:\\EmployeeReport.pdf";
            pdf.SaveAs(outputPath);
            Console.WriteLine($"PDF report generated: {outputPath}");
        }
    }
}
class Program
{
    static void Main(string[] args)
    {
        IronPdf.License.LicenseKey = "Key";
        // Initialize the database context
        using (var context = new AppDbContext())
        {
            // Fetch employees from the database
            var employees = context.Employees.ToList();
            // Generate HTML content for the PDF
            var htmlContent = "<h1>Employee Report</h1>";
            htmlContent += "<table><tr><th>ID</th><th>Last Name</th></tr>";
            foreach (var employee in employees)
            {
                htmlContent += $"<tr><td>{employee.Id}</td><td>{employee.LastName}</td></tr>";
            }
            htmlContent += "</table>";
            // Instantiate the IronPDF HtmlToPdf converter
            var renderer = new ChromePdfRenderer();
            // Generate the PDF document from the HTML content
            var pdf = renderer.RenderHtmlAsPdf(htmlContent);
            // Save the generated PDF to a file
            var outputPath = "f:\\EmployeeReport.pdf";
            pdf.SaveAs(outputPath);
            Console.WriteLine($"PDF report generated: {outputPath}");
        }
    }
}
Friend Class Program
	Shared Sub Main(ByVal args() As String)
		IronPdf.License.LicenseKey = "Key"
		' Initialize the database context
		Using context = New AppDbContext()
			' Fetch employees from the database
			Dim employees = context.Employees.ToList()
			' Generate HTML content for the PDF
			Dim htmlContent = "<h1>Employee Report</h1>"
			htmlContent &= "<table><tr><th>ID</th><th>Last Name</th></tr>"
			For Each employee In employees
				htmlContent &= $"<tr><td>{employee.Id}</td><td>{employee.LastName}</td></tr>"
			Next employee
			htmlContent &= "</table>"
			' Instantiate the IronPDF HtmlToPdf converter
			Dim renderer = New ChromePdfRenderer()
			' Generate the PDF document from the HTML content
			Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
			' Save the generated PDF to a file
			Dim outputPath = "f:\EmployeeReport.pdf"
			pdf.SaveAs(outputPath)
			Console.WriteLine($"PDF report generated: {outputPath}")
		End Using
	End Sub
End Class
$vbLabelText   $csharpLabel

出力

コードを実行すると、このコンソール出力が表示されます:

C# PostgreSQL (開発者向けガイド): 図4 - コンソール出力

このPDFが生成されました:

C# PostgreSQL (開発者向けガイド): 図5 - PDF出力

結論

あなたはC#とPostgreSQLを使用したデータベース管理の世界への重要な第一歩を踏み出しました。 このチュートリアルの指示に従って、Visual Studioでプロジェクトを設定し、必要なパッケージをインストールし、基本的なデータベース操作を実行する方法を学びました。 これらの概念に慣れていくうちに、C#と最も重要なリレーショナルデータベースシステムの1つを組み合わせる際の力と柔軟性を発見するでしょう。 異なるクエリやエンティティ構成を試して、C#がPostgreSQLとどのように対話するかについての理解を深め続けてください。

IronPDFは、IronPDF機能の無料トライアルを提供しており、開発者がその機能を初期投資なしで探求できます。 このトライアルは、IronPDFが.NETアプリケーションでPDFドキュメントを生成、編集、および変換するプロジェクトの要件をどれだけ満たすかを評価するために特に役立ちます。 試用期間後、または本番環境での使用のためには、ライセンスの取得が必要です。 IronPDFのライセンスは、$799から始まり、さまざまな開発ニーズに適した機能とサポートオプションを提供します。

よくある質問

C#アプリケーションをPostgreSQLデータベースに接続するにはどうすればよいですか?

C#アプリケーションをPostgreSQLデータベースに接続するには、Npgsqlデータプロバイダーを使用する必要があります。これはVisual StudioのNuGetパッケージマネージャー経由でインストールできます。サーバー名、ポート、ユーザー名、パスワード、データベース名を含む適切に構成された接続文字列も必要です。

C#プロジェクトをPostgreSQLでセットアップするにはどのようなステップが含まれていますか?

まず、マシンにVisual StudioとPostgreSQLをインストールします。その後、新しいC#プロジェクトを作成し、NuGetパッケージマネージャーを使用してNpgsqlデータプロバイダーをインストールします。接続文字列を設定し、PostgreSQLサーバーが実行されていることを確認します。

C#アプリケーションでSQLコマンドを実行するにはどうすればよいですか?

C#アプリケーションでSQLコマンドを実行するには、Npgsqlデータプロバイダーを使用します。PostgreSQLデータベースへの接続を確立したら、NpgsqlCommandを使用してSELECT、INSERT、UPDATE、DELETEといったSQLクエリを実行できます。

C#でPostgreSQLデータからPDFレポートを生成するにはどうすればよいですか?

IronPDFを使用すると、C#でPostgreSQLデータからPDFレポートを生成できます。データベースからデータを取得し、IronPDFの機能を使用してHTMLコンテンツをPDFに変換したり、既存のPDFを編集したりしてPDFドキュメントを作成できます。

C#でNpgsqlデータプロバイダーを使用する目的は何ですか?

Npgsqlデータプロバイダーは、C#でPostgreSQLデータベースとの通信を可能にするために使用されます。アプリケーションがSQLクエリを実行し、データを管理し、データベースとシームレスにやり取りできるようにします。

C#を使用してデータベースの作成とシードを行うにはどうすればよいですか?

C#では、context.Database.EnsureCreated()メソッドを使用してデータベースを作成できます。このメソッドはデータベースの存在を確認し、存在しない場合は作成します。初期データをシードするには、コンテキストにデータを追加し、context.SaveChanges()を使用してデータを永続化します。

C#アプリケーションでIronPDFを使用する利点は何ですか?

IronPDFは.NETアプリケーションにおいて、PDFドキュメントの作成、編集、操作において強力な機能を提供するため有益です。HTMLからPDFへの変換、テキストや画像の編集、暗号化などのセキュリティ機能をサポートしています。

C#でPostgreSQLテーブルのデータモデルを定義するにはどうすればよいですか?

C#でデータモデルを定義するには、PostgreSQLテーブル構造に対応するクラスを作成します。クラス内のプロパティはテーブルのカラムに対応しており、つまりEntity Frameworkがデータを正しくマップできるようになります。

C#とPostgreSQL間の接続の問題をトラブルシュートするにはどうすればよいですか?

接続の問題をトラブルシュートするには、接続文字列が正しく設定されているか確認し、PostgreSQLサーバーが実行中であることを確認し、接続をブロックしている可能性のあるファイアウォールやネットワークの問題がないかチェックします。

Curtis Chau
テクニカルライター

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。