푸터 콘텐츠로 바로가기
.NET 도움말

C# MySQL 연결 (개발자를 위한 작동 원리)

C# MySQL 통합 소개

C# 응용 프로그램을 MySQL 데이터베이스에 연결하면 개발자가 데이터를 효율적으로 저장, 검색 및 관리하기 위해 관계형 데이터베이스의 힘을 활용할 수 있습니다. 이 가이드는 C# 응용 프로그램과 MySQL을 통합하는 단계 별 프로세스를 제공하며, IronPDF 라이브러리를 사용하여 MySQL 데이터베이스 내의 데이터로부터 PDF를 생성하는 방법을 보여줍니다.

필수 조건

이 가이드를 따라가려면 다음이 필요합니다:

  • Visual Studio 또는 아무 C# IDE
  • MySQL 데이터베이스 (설치 및 실행 중인)
  • IronPDF 라이브러리 (PDF 생성용)

MySQL 데이터베이스 설정

MySQL 설치 및 설정

  1. mysql.com에서 MySQL 최신 버전을 다운로드하세요.
  2. 설치 관리자를 실행하고 설정 지침을 따르세요. "개발자 기본값"을 선택하여 MySQL 서버와 MySQL Workbench를 포함하세요.
  3. 설정 중 MySQL 루트 사용자 자격 증명을 설정하고 MySQL 서비스가 실행 중임을 확인하세요.

샘플 데이터베이스 및 테이블 생성

  1. MySQL Workbench를 열고 서버에 연결하세요.
  2. SQL 명령을 사용하여 새 데이터베이스와 샘플 테이블을 만드세요.
CREATE DATABASE SampleDB;
USE SampleDB;
CREATE TABLE Employees (
    EmployeeID INT PRIMARY KEY AUTO_INCREMENT,
    FirstName VARCHAR(50),
    LastName VARCHAR(50),
    Position VARCHAR(50),
    Salary DECIMAL(10, 2)
);
  1. 샘플 데이터를 삽입하세요.
INSERT INTO Employees (FirstName, LastName, Position, Salary) 
VALUES ('John', 'Doe', 'Software Developer', 80000),
       ('Jane', 'Smith', 'Data Analyst', 75000);

원격 액세스를 위한 MySQL 사용자 설정 (선택 사항)

원격 액세스를 위해 필요한 권한이 있는 MySQL 사용자를 생성하세요.

CREATE USER 'remoteUser'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON SampleDB.* TO 'remoteUser'@'%';
FLUSH PRIVILEGES;

C#을 MySQL 데이터베이스에 연결하기

Installing MySql.Data Library in C

C# 응용 프로그램을 MySQL에 연결하기 위해 MySQL Connector/NET 라이브러리를 사용합니다 (종종 Connector/NET이라고 불립니다). 이것은 NuGet을 통해 설치할 수 있는 MySQL에 대한 공식 .NET 드라이버입니다.

  1. Visual Studio를 열고 새 C# 콘솔 애플리케이션을 만듭니다.
  2. NuGet 패키지 관리자를 통해 MySql.Data 라이브러리를 추가하세요:
    • 프로젝트를 마우스 우클릭 > NuGet 패키지 관리 > 브라우저에서 검색 > MySql.Data를 검색하고 설치합니다.

연결 코드 작성하기

다음 코드 예제는 MySQL에 연결하는 방법을 보여줍니다:

using System;
using MySql.Data.MySqlClient;

public class Program
{
    // Connection string containing the server, database, user credentials, etc.
    private string connectionString = "Server=localhost;Database=SampleDB;User ID=root;Password=yourpassword;";

    private void Initialize()
    {
        // Create a MySQL connection object
        MySqlConnection connection = new MySqlConnection(connectionString);
        try
        {
            connection.Open();
            Console.WriteLine("Connected to MySQL Database!");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error: {ex.Message}");
        }
        finally
        {
            connection.Close(); // Ensure the connection is closed after use
        }
    }
}
using System;
using MySql.Data.MySqlClient;

public class Program
{
    // Connection string containing the server, database, user credentials, etc.
    private string connectionString = "Server=localhost;Database=SampleDB;User ID=root;Password=yourpassword;";

    private void Initialize()
    {
        // Create a MySQL connection object
        MySqlConnection connection = new MySqlConnection(connectionString);
        try
        {
            connection.Open();
            Console.WriteLine("Connected to MySQL Database!");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error: {ex.Message}");
        }
        finally
        {
            connection.Close(); // Ensure the connection is closed after use
        }
    }
}
Imports System
Imports MySql.Data.MySqlClient

Public Class Program
	' Connection string containing the server, database, user credentials, etc.
	Private connectionString As String = "Server=localhost;Database=SampleDB;User ID=root;Password=yourpassword;"

	Private Sub Initialize()
		' Create a MySQL connection object
		Dim connection As New MySqlConnection(connectionString)
		Try
			connection.Open()
			Console.WriteLine("Connected to MySQL Database!")
		Catch ex As Exception
			Console.WriteLine($"Error: {ex.Message}")
		Finally
			connection.Close() ' Ensure the connection is closed after use
		End Try
	End Sub
End Class
$vbLabelText   $csharpLabel

설명:

  • 연결 문자열: 서버명, 데이터베이스명, 사용자 ID, 비밀번호 등의 세부사항을 포함합니다.
  • MySqlConnection: 연결을 설정하는 데 사용됩니다.
  • Open() 메서드: 연결을 여는 시도를 합니다.
  • 예외 처리: 예외를 캐치하여 연결 오류를 우아하게 처리합니다.

연결을 위한 DNS SRV 레코드 사용 (선택 사항)

응용 프로그램이 클라우드에 호스팅되거나 DNS SRV 레코드를 통해 MySQL 데이터베이스에 연결해야 하는 경우, 서버명을 해당 데이터베이스의 IP로 해석되는 DNS 항목으로 대체할 수 있습니다.

string connectionString = "Server=mysql.example.com;Database=SampleDB;User ID=root;Password=yourpassword;";
string connectionString = "Server=mysql.example.com;Database=SampleDB;User ID=root;Password=yourpassword;";
Dim connectionString As String = "Server=mysql.example.com;Database=SampleDB;User ID=root;Password=yourpassword;"
$vbLabelText   $csharpLabel

연결 풀링

기본적으로, MySQL Connector/NET은 연결 풀링을 지원하며, 이는 데이터베이스 연결을 더 효율적으로 관리하는 데 도움이 됩니다. 연결 풀링은 풀에서 기존 연결을 재사용하여 반복적으로 연결을 열고 닫는 작업의 오버헤드를 줄여줍니다.

연결 풀링 동작을 사용자 정의하고 싶다면, 다음과 같이 연결 문자열을 조정할 수 있습니다:

string connectionString = "Server=localhost;Database=SampleDB;User ID=root;Password=yourpassword;Pooling=true;";
string connectionString = "Server=localhost;Database=SampleDB;User ID=root;Password=yourpassword;Pooling=true;";
Dim connectionString As String = "Server=localhost;Database=SampleDB;User ID=root;Password=yourpassword;Pooling=true;"
$vbLabelText   $csharpLabel

일반적인 오류 처리

일반적인 문제에는 잘못된 연결 문자열, 방화벽 제한, 또는 MySQL 서비스가 실행되지 않는 경우가 포함됩니다. 모든 구성 세부 정보가 정확하며 MySQL 서비스가 활성 상태인지 확인하세요.

C#과 MySQL로 CRUD 작업 수행하기

데이터베이스 작업을 위한 C# 클래스 생성하기

코드 조직을 위해, 모든 데이터베이스 작업을 처리할 DatabaseHelper 클래스를 만듭니다. 이 클래스는 데이터 삽입, 읽기, 업데이트, 삭제(CRUD) 작업을 위한 메소드를 포함할 것입니다.

using System;
using MySql.Data.MySqlClient;

public class DatabaseHelper
{
    private string connectionString = "Server=localhost;Database=SampleDB;User ID=root;Password=yourpassword;";

    // Method to insert a new employee record
    public void InsertEmployee(string firstName, string lastName, string position, decimal salary)
    {
        using (var connection = new MySqlConnection(connectionString))
        {
            string query = "INSERT INTO Employees (FirstName, LastName, Position, Salary) VALUES (@FirstName, @LastName, @Position, @Salary)";
            MySqlCommand cmd = new MySqlCommand(query, connection);

            // Add parameters to prevent SQL injection
            cmd.Parameters.AddWithValue("@FirstName", firstName);
            cmd.Parameters.AddWithValue("@LastName", lastName);
            cmd.Parameters.AddWithValue("@Position", position);
            cmd.Parameters.AddWithValue("@Salary", salary);

            connection.Open();
            cmd.ExecuteNonQuery(); // Execute the insert command
        }
    }
}
using System;
using MySql.Data.MySqlClient;

public class DatabaseHelper
{
    private string connectionString = "Server=localhost;Database=SampleDB;User ID=root;Password=yourpassword;";

    // Method to insert a new employee record
    public void InsertEmployee(string firstName, string lastName, string position, decimal salary)
    {
        using (var connection = new MySqlConnection(connectionString))
        {
            string query = "INSERT INTO Employees (FirstName, LastName, Position, Salary) VALUES (@FirstName, @LastName, @Position, @Salary)";
            MySqlCommand cmd = new MySqlCommand(query, connection);

            // Add parameters to prevent SQL injection
            cmd.Parameters.AddWithValue("@FirstName", firstName);
            cmd.Parameters.AddWithValue("@LastName", lastName);
            cmd.Parameters.AddWithValue("@Position", position);
            cmd.Parameters.AddWithValue("@Salary", salary);

            connection.Open();
            cmd.ExecuteNonQuery(); // Execute the insert command
        }
    }
}
Imports System
Imports MySql.Data.MySqlClient

Public Class DatabaseHelper
	Private connectionString As String = "Server=localhost;Database=SampleDB;User ID=root;Password=yourpassword;"

	' Method to insert a new employee record
	Public Sub InsertEmployee(ByVal firstName As String, ByVal lastName As String, ByVal position As String, ByVal salary As Decimal)
		Using connection = New MySqlConnection(connectionString)
			Dim query As String = "INSERT INTO Employees (FirstName, LastName, Position, Salary) VALUES (@FirstName, @LastName, @Position, @Salary)"
			Dim cmd As New MySqlCommand(query, connection)

			' Add parameters to prevent SQL injection
			cmd.Parameters.AddWithValue("@FirstName", firstName)
			cmd.Parameters.AddWithValue("@LastName", lastName)
			cmd.Parameters.AddWithValue("@Position", position)
			cmd.Parameters.AddWithValue("@Salary", salary)

			connection.Open()
			cmd.ExecuteNonQuery() ' Execute the insert command
		End Using
	End Sub
End Class
$vbLabelText   $csharpLabel

설명:

  • 매개변수화: @Parameter을 사용하면 SQL 삽입의 위험이 감소합니다.
  • connection.Open(): MySQL 연결을 엽니다.
  • cmd.ExecuteNonQuery(): 삽입 쿼리를 실행합니다.

MySQL 데이터베이스에 데이터 삽입하기

새 직원 데이터를 추가하려면 InsertEmployee 메서드를 호출합니다:

DatabaseHelper dbHelper = new DatabaseHelper();
dbHelper.InsertEmployee("Alice", "Brown", "Project Manager", 90000);
DatabaseHelper dbHelper = new DatabaseHelper();
dbHelper.InsertEmployee("Alice", "Brown", "Project Manager", 90000);
Dim dbHelper As New DatabaseHelper()
dbHelper.InsertEmployee("Alice", "Brown", "Project Manager", 90000)
$vbLabelText   $csharpLabel

데이터 검색 및 표시

데이터를 검색하고 콘솔에 표시하세요:

public void GetEmployees()
{
    using (var connection = new MySqlConnection(connectionString))
    {
        string query = "SELECT * FROM Employees";
        MySqlCommand cmd = new MySqlCommand(query, connection);
        connection.Open();

        using (MySqlDataReader reader = cmd.ExecuteReader())
        {
            while (reader.Read())
            {
                Console.WriteLine($"{reader["FirstName"]} {reader["LastName"]}, Position: {reader["Position"]}, Salary: {reader["Salary"]}");
            }
        }
    }
}
public void GetEmployees()
{
    using (var connection = new MySqlConnection(connectionString))
    {
        string query = "SELECT * FROM Employees";
        MySqlCommand cmd = new MySqlCommand(query, connection);
        connection.Open();

        using (MySqlDataReader reader = cmd.ExecuteReader())
        {
            while (reader.Read())
            {
                Console.WriteLine($"{reader["FirstName"]} {reader["LastName"]}, Position: {reader["Position"]}, Salary: {reader["Salary"]}");
            }
        }
    }
}
Public Sub GetEmployees()
	Using connection = New MySqlConnection(connectionString)
		Dim query As String = "SELECT * FROM Employees"
		Dim cmd As New MySqlCommand(query, connection)
		connection.Open()

		Using reader As MySqlDataReader = cmd.ExecuteReader()
			Do While reader.Read()
				Console.WriteLine($"{reader("FirstName")} {reader("LastName")}, Position: {reader("Position")}, Salary: {reader("Salary")}")
			Loop
		End Using
	End Using
End Sub
$vbLabelText   $csharpLabel

설명:

  • ExecuteReader(): 선택 쿼리를 실행하고 MySqlDataReader 객체를 반환합니다.
  • reader.Read(): 결과 집합을 반복하여 각 직원의 세부 정보를 표시합니다.

레코드 업데이트 및 삭제

다음은 직원의 급여를 업데이트하는 예입니다:

public void UpdateEmployeeSalary(int employeeId, decimal newSalary)
{
    using (var connection = new MySqlConnection(connectionString))
    {
        string query = "UPDATE Employees SET Salary = @Salary WHERE EmployeeID = @EmployeeID";
        MySqlCommand cmd = new MySqlCommand(query, connection);

        // Parameterize the SQL command
        cmd.Parameters.AddWithValue("@Salary", newSalary);
        cmd.Parameters.AddWithValue("@EmployeeID", employeeId);

        connection.Open();
        cmd.ExecuteNonQuery(); // Execute the update command
        Console.WriteLine("Employee salary updated successfully!");
    }
}
public void UpdateEmployeeSalary(int employeeId, decimal newSalary)
{
    using (var connection = new MySqlConnection(connectionString))
    {
        string query = "UPDATE Employees SET Salary = @Salary WHERE EmployeeID = @EmployeeID";
        MySqlCommand cmd = new MySqlCommand(query, connection);

        // Parameterize the SQL command
        cmd.Parameters.AddWithValue("@Salary", newSalary);
        cmd.Parameters.AddWithValue("@EmployeeID", employeeId);

        connection.Open();
        cmd.ExecuteNonQuery(); // Execute the update command
        Console.WriteLine("Employee salary updated successfully!");
    }
}
Public Sub UpdateEmployeeSalary(ByVal employeeId As Integer, ByVal newSalary As Decimal)
	Using connection = New MySqlConnection(connectionString)
		Dim query As String = "UPDATE Employees SET Salary = @Salary WHERE EmployeeID = @EmployeeID"
		Dim cmd As New MySqlCommand(query, connection)

		' Parameterize the SQL command
		cmd.Parameters.AddWithValue("@Salary", newSalary)
		cmd.Parameters.AddWithValue("@EmployeeID", employeeId)

		connection.Open()
		cmd.ExecuteNonQuery() ' Execute the update command
		Console.WriteLine("Employee salary updated successfully!")
	End Using
End Sub
$vbLabelText   $csharpLabel

업데이트 명령: 매개변수화된 쿼리를 사용하여 EmployeeID에 기반하여 Salary 열을 업데이트합니다.

IronPDF로 MySQL 데이터에서 PDF 생성하기

IronPDF 소개

IronPDF는 개발자가 C# 애플리케이션 내에서 쉽게 PDF 문서를 생성, 편집, 조작할 수 있게 해주는 강력한 라이브러리입니다. 이것은 폭넓은 PDF 기능을 지원하여 자동화된 보고서 생성, 문서 조작, HTML에서 PDF로의 변환을 필요로 하는 데이터 중심 애플리케이션에 완벽한 도구입니다. 동적 웹페이지를 PDF 파일로 변환하거나, 처음부터 맞춤형 PDF를 생성해야 할 때, IronPDF는 몇 줄의 코드로 과정을 단순화합니다.

IronPDF 의 주요 기능

  • HTML에서 PDF로의 변환: IronPDF의 돋보이는 기능 중 하나는 HTML 콘텐츠를 완전히 형식화된 PDF 문서로 변환하는 것입니다. 이 기능은 동적 웹 콘텐츠로부터 보고서를 생성하거나 웹 형식에 저장된 데이터를 작업할 때 특히 유용합니다.
  • PDF 편집: IronPDF는 기존 PDF를 편집할 수 있는 기능을 제공하며, 여기에는 텍스트, 이미지, 테이블 등을 추가, 제거, 수정하는 것이 포함됩니다. 이는 기존 문서를 처리하거나 업데이트해야 하는 애플리케이션에 이상적입니다.
  • PDF 병합 및 분할: IronPDF를 사용하면 여러 PDF를 단일 문서로 병합하거나 큰 PDF를 작은 파일로 분할할 수 있습니다. 이 기능은 대규모 문서 컬렉션을 정리하고 관리하는 데 유용합니다.
  • 스타일링 및 사용자 정의: HTML에서 PDF를 생성할 때, CSS를 사용하여 문서 스타일을 지정하고 애플리케이션의 디자인과 일치하는 사용자 정의 레이아웃을 달성할 수 있습니다. IronPDF는 PDF의 외형을 완전히 제어할 수 있게 해, 특정 요구 사항을 충족할 수 있도록 합니다.

C# 프로젝트에 IronPDF 설정하기

IronPDF를 사용하려면 Visual Studio의 NuGet 패키지 관리자를 통해 설치하세요:

Install-Package IronPdf

MySQL 데이터를 PDF 형식으로 변환하기

직원 데이터의 PDF 보고서를 생성하는 방법을 보여주는 전체 코드 예는 다음과 같습니다:

using System;
using MySql.Data.MySqlClient;
using IronPdf;

public class Program
{
    private static string connectionString = "Server=localhost;Database=SampleDB;User ID=root;Password=yourpassword;";

    public static void Main(string[] args)
    {
        // Perform CRUD operations
        DatabaseHelper dbHelper = new DatabaseHelper();
        // Insert a new employee
        dbHelper.InsertEmployee("Alice", "Brown", "Project Manager", 90000);
        // Display employees
        dbHelper.GetEmployees();
        // Update an employee's salary
        dbHelper.UpdateEmployeeSalary(1, 95000);
        // Generate a PDF report
        dbHelper.GenerateEmployeeReportPDF();
        Console.WriteLine("Operations completed.");
    }
}

public class DatabaseHelper
{
    private string connectionString = "Server=localhost;Database=SampleDB;User ID=root;Password=yourpassword;";

    // Insert employee into database
    public void InsertEmployee(string firstName, string lastName, string position, decimal salary)
    {
        using (var connection = new MySqlConnection(connectionString))
        {
            string query = "INSERT INTO Employees (FirstName, LastName, Position, Salary) VALUES (@FirstName, @LastName, @Position, @Salary)";
            MySqlCommand cmd = new MySqlCommand(query, connection);
            cmd.Parameters.AddWithValue("@FirstName", firstName);
            cmd.Parameters.AddWithValue("@LastName", lastName);
            cmd.Parameters.AddWithValue("@Position", position);
            cmd.Parameters.AddWithValue("@Salary", salary);
            connection.Open();
            cmd.ExecuteNonQuery();
            Console.WriteLine($"Employee {firstName} {lastName} inserted successfully!");
        }
    }

    // Get employees from the database and display them
    public void GetEmployees()
    {
        using (var connection = new MySqlConnection(connectionString))
        {
            string query = "SELECT * FROM Employees";
            MySqlCommand cmd = new MySqlCommand(query, connection);
            connection.Open();

            using (MySqlDataReader reader = cmd.ExecuteReader())
            {
                Console.WriteLine("\nEmployee List:");
                while (reader.Read())
                {
                    Console.WriteLine($"{reader["EmployeeID"]} - {reader["FirstName"]} {reader["LastName"]}, Position: {reader["Position"]}, Salary: {reader["Salary"]}");
                }
            }
        }
    }

    // Update the salary of an employee
    public void UpdateEmployeeSalary(int employeeId, decimal newSalary)
    {
        using (var connection = new MySqlConnection(connectionString))
        {
            string query = "UPDATE Employees SET Salary = @Salary WHERE EmployeeID = @EmployeeID";
            MySqlCommand cmd = new MySqlCommand(query, connection);
            cmd.Parameters.AddWithValue("@Salary", newSalary);
            cmd.Parameters.AddWithValue("@EmployeeID", employeeId);
            connection.Open();
            cmd.ExecuteNonQuery();
            Console.WriteLine($"Employee ID {employeeId}'s salary updated to {newSalary}.");
        }
    }

    // Generate a PDF report of all employees
    public void GenerateEmployeeReportPDF()
    {
        string htmlContent = "<h1>Employee Report</h1><table border='1'><tr><th>EmployeeID</th><th>First Name</th><th>Last Name</th><th>Position</th><th>Salary</th></tr>";

        using (var connection = new MySqlConnection(connectionString))
        {
            string query = "SELECT * FROM Employees";
            MySqlCommand cmd = new MySqlCommand(query, connection);
            connection.Open();

            using (MySqlDataReader reader = cmd.ExecuteReader())
            {
                while (reader.Read())
                {
                    htmlContent += $"<tr><td>{reader["EmployeeID"]}</td><td>{reader["FirstName"]}</td><td>{reader["LastName"]}</td><td>{reader["Position"]}</td><td>{reader["Salary"]}</td></tr>";
                }
            }
        }

        htmlContent += "</table>";

        // Use IronPDF to convert HTML to PDF
        ChromePdfRenderer renderer = new ChromePdfRenderer();
        PdfDocument pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs("EmployeeReport.pdf");
        Console.WriteLine("PDF Report generated successfully!");
    }
}
using System;
using MySql.Data.MySqlClient;
using IronPdf;

public class Program
{
    private static string connectionString = "Server=localhost;Database=SampleDB;User ID=root;Password=yourpassword;";

    public static void Main(string[] args)
    {
        // Perform CRUD operations
        DatabaseHelper dbHelper = new DatabaseHelper();
        // Insert a new employee
        dbHelper.InsertEmployee("Alice", "Brown", "Project Manager", 90000);
        // Display employees
        dbHelper.GetEmployees();
        // Update an employee's salary
        dbHelper.UpdateEmployeeSalary(1, 95000);
        // Generate a PDF report
        dbHelper.GenerateEmployeeReportPDF();
        Console.WriteLine("Operations completed.");
    }
}

public class DatabaseHelper
{
    private string connectionString = "Server=localhost;Database=SampleDB;User ID=root;Password=yourpassword;";

    // Insert employee into database
    public void InsertEmployee(string firstName, string lastName, string position, decimal salary)
    {
        using (var connection = new MySqlConnection(connectionString))
        {
            string query = "INSERT INTO Employees (FirstName, LastName, Position, Salary) VALUES (@FirstName, @LastName, @Position, @Salary)";
            MySqlCommand cmd = new MySqlCommand(query, connection);
            cmd.Parameters.AddWithValue("@FirstName", firstName);
            cmd.Parameters.AddWithValue("@LastName", lastName);
            cmd.Parameters.AddWithValue("@Position", position);
            cmd.Parameters.AddWithValue("@Salary", salary);
            connection.Open();
            cmd.ExecuteNonQuery();
            Console.WriteLine($"Employee {firstName} {lastName} inserted successfully!");
        }
    }

    // Get employees from the database and display them
    public void GetEmployees()
    {
        using (var connection = new MySqlConnection(connectionString))
        {
            string query = "SELECT * FROM Employees";
            MySqlCommand cmd = new MySqlCommand(query, connection);
            connection.Open();

            using (MySqlDataReader reader = cmd.ExecuteReader())
            {
                Console.WriteLine("\nEmployee List:");
                while (reader.Read())
                {
                    Console.WriteLine($"{reader["EmployeeID"]} - {reader["FirstName"]} {reader["LastName"]}, Position: {reader["Position"]}, Salary: {reader["Salary"]}");
                }
            }
        }
    }

    // Update the salary of an employee
    public void UpdateEmployeeSalary(int employeeId, decimal newSalary)
    {
        using (var connection = new MySqlConnection(connectionString))
        {
            string query = "UPDATE Employees SET Salary = @Salary WHERE EmployeeID = @EmployeeID";
            MySqlCommand cmd = new MySqlCommand(query, connection);
            cmd.Parameters.AddWithValue("@Salary", newSalary);
            cmd.Parameters.AddWithValue("@EmployeeID", employeeId);
            connection.Open();
            cmd.ExecuteNonQuery();
            Console.WriteLine($"Employee ID {employeeId}'s salary updated to {newSalary}.");
        }
    }

    // Generate a PDF report of all employees
    public void GenerateEmployeeReportPDF()
    {
        string htmlContent = "<h1>Employee Report</h1><table border='1'><tr><th>EmployeeID</th><th>First Name</th><th>Last Name</th><th>Position</th><th>Salary</th></tr>";

        using (var connection = new MySqlConnection(connectionString))
        {
            string query = "SELECT * FROM Employees";
            MySqlCommand cmd = new MySqlCommand(query, connection);
            connection.Open();

            using (MySqlDataReader reader = cmd.ExecuteReader())
            {
                while (reader.Read())
                {
                    htmlContent += $"<tr><td>{reader["EmployeeID"]}</td><td>{reader["FirstName"]}</td><td>{reader["LastName"]}</td><td>{reader["Position"]}</td><td>{reader["Salary"]}</td></tr>";
                }
            }
        }

        htmlContent += "</table>";

        // Use IronPDF to convert HTML to PDF
        ChromePdfRenderer renderer = new ChromePdfRenderer();
        PdfDocument pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs("EmployeeReport.pdf");
        Console.WriteLine("PDF Report generated successfully!");
    }
}
Imports Microsoft.VisualBasic
Imports System
Imports MySql.Data.MySqlClient
Imports IronPdf

Public Class Program
	Private Shared connectionString As String = "Server=localhost;Database=SampleDB;User ID=root;Password=yourpassword;"

	Public Shared Sub Main(ByVal args() As String)
		' Perform CRUD operations
		Dim dbHelper As New DatabaseHelper()
		' Insert a new employee
		dbHelper.InsertEmployee("Alice", "Brown", "Project Manager", 90000)
		' Display employees
		dbHelper.GetEmployees()
		' Update an employee's salary
		dbHelper.UpdateEmployeeSalary(1, 95000)
		' Generate a PDF report
		dbHelper.GenerateEmployeeReportPDF()
		Console.WriteLine("Operations completed.")
	End Sub
End Class

Public Class DatabaseHelper
	Private connectionString As String = "Server=localhost;Database=SampleDB;User ID=root;Password=yourpassword;"

	' Insert employee into database
	Public Sub InsertEmployee(ByVal firstName As String, ByVal lastName As String, ByVal position As String, ByVal salary As Decimal)
		Using connection = New MySqlConnection(connectionString)
			Dim query As String = "INSERT INTO Employees (FirstName, LastName, Position, Salary) VALUES (@FirstName, @LastName, @Position, @Salary)"
			Dim cmd As New MySqlCommand(query, connection)
			cmd.Parameters.AddWithValue("@FirstName", firstName)
			cmd.Parameters.AddWithValue("@LastName", lastName)
			cmd.Parameters.AddWithValue("@Position", position)
			cmd.Parameters.AddWithValue("@Salary", salary)
			connection.Open()
			cmd.ExecuteNonQuery()
			Console.WriteLine($"Employee {firstName} {lastName} inserted successfully!")
		End Using
	End Sub

	' Get employees from the database and display them
	Public Sub GetEmployees()
		Using connection = New MySqlConnection(connectionString)
			Dim query As String = "SELECT * FROM Employees"
			Dim cmd As New MySqlCommand(query, connection)
			connection.Open()

			Using reader As MySqlDataReader = cmd.ExecuteReader()
				Console.WriteLine(vbLf & "Employee List:")
				Do While reader.Read()
					Console.WriteLine($"{reader("EmployeeID")} - {reader("FirstName")} {reader("LastName")}, Position: {reader("Position")}, Salary: {reader("Salary")}")
				Loop
			End Using
		End Using
	End Sub

	' Update the salary of an employee
	Public Sub UpdateEmployeeSalary(ByVal employeeId As Integer, ByVal newSalary As Decimal)
		Using connection = New MySqlConnection(connectionString)
			Dim query As String = "UPDATE Employees SET Salary = @Salary WHERE EmployeeID = @EmployeeID"
			Dim cmd As New MySqlCommand(query, connection)
			cmd.Parameters.AddWithValue("@Salary", newSalary)
			cmd.Parameters.AddWithValue("@EmployeeID", employeeId)
			connection.Open()
			cmd.ExecuteNonQuery()
			Console.WriteLine($"Employee ID {employeeId}'s salary updated to {newSalary}.")
		End Using
	End Sub

	' Generate a PDF report of all employees
	Public Sub GenerateEmployeeReportPDF()
		Dim htmlContent As String = "<h1>Employee Report</h1><table border='1'><tr><th>EmployeeID</th><th>First Name</th><th>Last Name</th><th>Position</th><th>Salary</th></tr>"

		Using connection = New MySqlConnection(connectionString)
			Dim query As String = "SELECT * FROM Employees"
			Dim cmd As New MySqlCommand(query, connection)
			connection.Open()

			Using reader As MySqlDataReader = cmd.ExecuteReader()
				Do While reader.Read()
					htmlContent &= $"<tr><td>{reader("EmployeeID")}</td><td>{reader("FirstName")}</td><td>{reader("LastName")}</td><td>{reader("Position")}</td><td>{reader("Salary")}</td></tr>"
				Loop
			End Using
		End Using

		htmlContent &= "</table>"

		' Use IronPDF to convert HTML to PDF
		Dim renderer As New ChromePdfRenderer()
		Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(htmlContent)
		pdf.SaveAs("EmployeeReport.pdf")
		Console.WriteLine("PDF Report generated successfully!")
	End Sub
End Class
$vbLabelText   $csharpLabel

코드 분석

  1. MySQL 데이터베이스 연결:

    • connectionString은 MySQL 서버, 데이터베이스, 사용자 및 비밀번호를 정의합니다.
    • MySqlConnection를 사용하여 연결하고 MySqlCommand으로 CRUD 작업을 처리합니다.
  2. 삽입 작업 (InsertEmployee):

    • 매개변수화된 쿼리 (@FirstName, @LastName 등)를 사용하여 SQL 삽입을 방지하기 위해 MySqlCommand을 사용합니다.
    • 연결을 연 후 (connection.Open()), ExecuteNonQuery()이 INSERT SQL 문을 실행합니다.
  3. 읽기 작업 (GetEmployees):

    • 모든 직원 레코드를 가져오기 위해 SELECT * 쿼리를 실행합니다.
    • MySqlDataReader을 사용하여 결과 집합을 반복하고 각 레코드를 콘솔에 표시합니다.
  4. 업데이트 작업 (UpdateEmployeeSalary):

    • 이 메서드는 직원의 급여를 업데이트하기 위해 employeeIdnewSalary을 허용합니다.
    • 매개변수가 있는 UPDATE SQL 쿼리를 사용합니다.
  5. PDF 생성 (GenerateEmployeeReportPDF):
    • 직원 데이터를 단순한 테이블 구조의 HTML 문자열로 수집합니다.
    • HTML 콘텐츠는 PDF 보고서를 생성하기 위해 IronPDF의 RenderHtmlAsPdf 메서드로 전달됩니다.
    • 결과 PDF는 EmployeeReport.pdf으로 저장됩니다.

결론

이 기사에서는 C# 애플리케이션과 MySQL을 통합하는 필수 단계를 살펴보았습니다. 데이터베이스 설정, CRUD 작업 수행, IronPDF로 PDF 생성까지 데이터 주도 애플리케이션을 구축하는 데 중요한 다양한 기본적인 주제를 다루었습니다. 주요 개념을 요약하면 다음과 같습니다:

  • MySQL과 C# 통합: MySql.Data 라이브러리를 사용하여 MySQL 데이터베이스에 연결하고, 데이터베이스 연결을 관리하며, 매개변수가 있는 쿼리를 사용하여 CRUD 작업을 수행하는 방법을 설명했습니다. 이는 데이터를 효율적으로 저장, 업데이트 및 검색할 수 있게 하여 보안적이고 조직적으로 관리할 수 있게 합니다.
  • CRUD 작업 수행: 직원 데이터를 삽입, 업데이트, 읽기 위해 예제 메서드를 사용하여 실제 데이터베이스에서 다른 유형의 레코드를 관리할 수 있도록 논리를 확장할 수 있습니다. 매개변수화된 쿼리를 사용하면 SQL 삽입 공격을 완화할 수도 있어 애플리케이션의 보안을 보장할 수 있습니다.
  • PDF 생성용 IronPDF: IronPDF는 동적 HTML 콘텐츠에서 전문적인 PDF를 쉽게 생성할 수 있습니다. MySQL에서 검색된 데이터를 HTML 테이블로 변환하여 맞춤형 보고서를 생성하고 PDF로 저장할 수 있으며, 이는 인보이스, 보고서, 요약 등의 생성을 위해 유용할 수 있습니다. IronPDF의 간단한 API는 애플리케이션 내 PDF 생성을 처리해야 하는 모든 C# 개발자에게 탁월한 도구입니다.

C#과 MySQL을 결합하면 데이터 저장 및 관리가 가능하며, PDF 보고와 같은 고급 기능을 제공하는 견고한 애플리케이션을 구축할 수 있습니다. 금융에서 의료 분야까지 다양한 산업에서 정확한 데이터 관리 및 보고가 중요하기 때문에 이러한 기능은 유용합니다.

C# 애플리케이션에 PDF 생성을 통합하려는 개발자를 위해 전체 기능 세트를 테스트해 볼 수 있는 IronPDF가 있습니다. 단순한 문서부터 정교한 보고서까지 생성해야 할 경우 IronPDF는 워크플로 내에서 PDF 생성을 자동화하는 데 귀중한 도구가 될 수 있습니다.

자주 묻는 질문

C# 애플리케이션과 MySQL을 통합하기 위한 전제 조건은 무엇인가요?

C# 애플리케이션과 MySQL을 통합하려면, Visual Studio와 같은 IDE, 실행 중인 MySQL 데이터베이스, 그리고 데이터베이스 콘텐츠로부터 PDF를 생성하는 IronPDF가 필요합니다.

C#을 사용하여 MySQL 데이터를 PDF로 변환하려면 어떻게 해야 하나요?

MySQL 데이터를 PDF로 변환하려면, 먼저 데이터를 HTML 문자열로 변환하고, IronPDF의 RenderHtmlAsPdf 메서드를 사용하여 PDF 문서를 생성해야 합니다.

C#에서 사용할 MySQL 설치 및 구성은 어떻게 하나요?

mysql.com에서 MySQL을 다운로드하여 설치 프로그램을 실행한 후 설치 지침을 따릅니다. Developer Default를 선택하여 MySQL Server와 Workbench를 포함시키고 루트 사용자 자격 증명을 구성합니다.

C#과 MySQL 데이터베이스 연결성을 위해 추천되는 라이브러리는 무엇인가요?

C# 애플리케이션과 MySQL 데이터베이스 간의 연결성을 확보하기 위해 MySQL Connector/NET 라이브러리가 추천됩니다. 이는 연결 문자열을 사용하여 통신을 용이하게 합니다.

C#과 MySQL을 사용할 때 SQL 쿼리를 어떻게 보안할 수 있나요?

SQL 쿼리를 보안하려면, 매개변수화된 쿼리를 사용하여 적절한 입력 검증을 통해 SQL 인젝션 공격을 방지합니다.

MySQL과 C#의 맥락에서 연결 풀링이란 무엇인가요?

연결 풀링은 데이터베이스 연결을 풀에서 재사용하여, 반복적인 연결 열고 닫기와 관련된 오버헤드를 줄임으로써 효율성을 높이는 관행을 말합니다.

C# 통합을 위한 MySQL 샘플 데이터베이스와 테이블은 어떻게 생성하나요?

MySQL Workbench를 열고 서버에 연결한 후 CREATE DATABASE SampleDB;CREATE TABLE Employees (...); 등의 SQL 명령어를 사용하여 샘플 데이터베이스와 테이블을 설정하세요.

C# 애플리케이션용 PDF 라이브러리를 선택할 때 어떤 기능을 찾아야 하나요?

C#용 강력한 PDF 라이브러리는 IronPDF가 제공하는 HTML에서 PDF로의 변환, PDF 편집, 병합 및 분할, CSS를 사용한 사용자 지정 스타일 적용과 같은 기능을 제공해야 합니다.

C#을 사용하여 MySQL 데이터베이스에서 CRUD 작업을 수행하는 방법은 무엇인가요?

C#에서 매개변수화된 SQL 명령어를 사용하는 도우미 클래스를 만들어 MySQL 데이터베이스에서 데이터 삽입, 읽기, 업데이트 및 삭제 작업을 구현하세요.

C#을 사용하여 MySQL 데이터베이스에서 직원의 세부 사항을 어떻게 업데이트할 수 있나요?

C#에서 매개변수화된 UPDATE SQL 명령어를 사용하여 직원 ID를 기준으로 하는 급여 업데이트와 같은 수정이 가능한 메서드를 작성하여 직원의 세부 사항을 업데이트합니다.

제이콥 멜러, 팀 아이언 최고기술책임자
최고기술책임자

제이콥 멜러는 Iron Software의 최고 기술 책임자(CTO)이자 C# PDF 기술을 개척한 선구적인 엔지니어입니다. Iron Software의 핵심 코드베이스를 최초로 개발한 그는 창립 초기부터 회사의 제품 아키텍처를 설계해 왔으며, CEO인 캐머런 리밍턴과 함께 회사를 NASA, 테슬라, 그리고 전 세계 정부 기관에 서비스를 제공하는 50명 이상의 직원을 보유한 기업으로 성장시켰습니다.

제이콥은 맨체스터 대학교에서 토목공학 학사 학위(BEng)를 최우등으로 취득했습니다(1998~2001). 1999년 런던에서 첫 소프트웨어 회사를 설립하고 2005년 첫 .NET 컴포넌트를 개발한 후, 마이크로소프트 생태계 전반에 걸쳐 복잡한 문제를 해결하는 데 전문성을 발휘해 왔습니다.

그의 대표 제품인 IronPDF 및 Iron Suite .NET 라이브러리는 전 세계적으로 3천만 건 이상의 NuGet 설치 수를 기록했으며, 그의 핵심 코드는 전 세계 개발자들이 사용하는 다양한 도구에 지속적으로 활용되고 있습니다. 25년의 실무 경험과 41년의 코딩 전문성을 바탕으로, 제이콥은 차세대 기술 리더들을 양성하는 동시에 기업 수준의 C#, Java, Python PDF 기술 혁신을 주도하는 데 주력하고 있습니다.

아이언 서포트 팀

저희는 주 5일, 24시간 온라인으로 운영합니다.
채팅
이메일
전화해