C# Database Integration

데이터베이스 연동 소개 (Introduction to Database Integration)

C#에서 데이터베이스 연동은 애플리케이션이 데이터베이스와 상호작용할 수 있도록 하는 중요한 과정입니다. 이 작업은 데이터의 저장, 조회, 수정, 삭제와 같은 기능을 포함합니다. C#에서는 두 가지 주요 방법으로 데이터베이스와 연동할 수 있습니다: ADO.NETEntity Framework. ADO.NET은 데이터베이스와의 직접적인 연결과 쿼리 실행을 지원하며, Entity Framework는 객체-관계 매핑(ORM)을 통해 데이터베이스와 객체 간의 매핑을 자동으로 처리합니다. 이 문서에서는 두 방법의 개요와 기본적인 CRUD 연산을 설명합니다.

ADO.NET 소개 (Introduction to ADO.NET)

ADO.NET은 데이터베이스와의 상호작용을 위한 .NET 프레임워크의 구성 요소로, 데이터베이스 연결, 쿼리 실행, 데이터 조작 등을 수행합니다. 주요 클래스에는 SqlConnection, SqlCommand, SqlDataReader, SqlDataAdapter, DataSet이 포함됩니다.

ADO.NET의 주요 구성 요소 (Key Components of ADO.NET)

  • SqlConnection: 데이터베이스와의 연결을 관리합니다.
  • SqlCommand: SQL 쿼리 또는 저장 프로시저를 실행합니다.
  • SqlDataReader: 쿼리 결과를 읽어옵니다.
  • SqlDataAdapter: 데이터베이스와 애플리케이션 간의 데이터 교환을 처리합니다.
  • DataSet: 데이터의 비연결적 캐시를 제공합니다.

ADO.NET 사용 예제 (Using ADO.NET)

데이터베이스 연결 (Connecting to a Database)

using System;
using System.Data.SqlClient;

namespace ADOExample
{
    class Program
    {
        static void Main(string[] args)
        {
            string connectionString = "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;";

            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                try
                {
                    connection.Open();
                    Console.WriteLine("Database connection successful.");
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"Connection error: {ex.Message}");
                }
            }
        }
    }
}

이 예제에서는 SQL Server에 연결하기 위한 SqlConnection을 생성하고 연결을 시도합니다.

SQL 쿼리 실행 (Executing SQL Queries)

using System;
using System.Data.SqlClient;

namespace ADOExample
{
    class Program
    {
        static void Main(string[] args)
        {
            string connectionString = "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;";
            string query = "SELECT * FROM Employees";

            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                SqlCommand command = new SqlCommand(query, connection);

                try
                {
                    connection.Open();
                    SqlDataReader reader = command.ExecuteReader();

                    while (reader.Read())
                    {
                        Console.WriteLine($"ID: {reader["Id"]}, Name: {reader["Name"]}");
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"Query error: {ex.Message}");
                }
            }
        }
    }
}

이 예제에서는 SqlCommand를 사용하여 SQL 쿼리를 실행하고 SqlDataReader를 통해 결과를 읽어옵니다.

데이터 삽입 (Inserting Data)

using System;
using System.Data.SqlClient;

namespace ADOExample
{
    class Program
    {
        static void Main(string[] args)
        {
            string connectionString = "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;";
            string query = "INSERT INTO Employees (Name, Position) VALUES (@Name, @Position)";

            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                SqlCommand command = new SqlCommand(query, connection);
                command.Parameters.AddWithValue("@Name", "John Doe");
                command.Parameters.AddWithValue("@Position", "Developer");

                try
                {
                    connection.Open();
                    int rowsAffected = command.ExecuteNonQuery();
                    Console.WriteLine($"{rowsAffected} row(s) inserted.");
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"Insert error: {ex.Message}");
                }
            }
        }
    }
}

이 예제는 매개변수를 사용하여 SQL INSERT 문을 실행합니다.

Entity Framework 소개 (Introduction to Entity Framework)

Entity Framework(EF)는 객체-관계 매핑(ORM) 프레임워크로, 데이터베이스의 테이블과 C# 객체 간의 매핑을 자동으로 처리합니다. EF는 데이터베이스와의 상호작용을 더 쉽게 관리할 수 있는 고수준의 추상화를 제공합니다. EF Core는 최신 EF의 경량화된 버전으로, 다양한 데이터베이스 제공자를 지원합니다.

EF Core 설치 (Installing EF Core)

NuGet 패키지 매니저를 통해 EF Core와 SQL Server 제공자를 설치합니다.

Install-Package Microsoft.EntityFrameworkCore
Install-Package Microsoft.EntityFrameworkCore.SqlServer

기본 CRUD 연산 (Basic CRUD Operations)

CRUD 연산은 데이터베이스에서 데이터를 생성(Create), 읽기(Read), 업데이트(Update), 삭제(Delete)하는 기본 작업입니다. EF Core를 사용하여 이 작업들을 수행하는 방법을 설명합니다.

모델 및 DbContext 정의 (Defining Model and DbContext)

using Microsoft.EntityFrameworkCore;

namespace EFCoreCRUDExample
{
    public class Employee
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Position { get; set; }
    }

    public class AppDbContext : DbContext
    {
        public DbSet<Employee> Employees { get; set; }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlServer("Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;");
        }
    }
}

Employee 클래스는 데이터베이스의 테이블과 매핑되는 모델을 정의하며, AppDbContext는 EF Core가 데이터베이스와 상호작용하는 컨텍스트 클래스입니다.

데이터 생성 (Create)

using System;

namespace EFCoreCRUDExample
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var context = new AppDbContext())
            {
                var newEmployee = new Employee
                {
                    Name = "Alice Johnson",
                    Position = "Software Engineer"
                };

                context.Employees.Add(newEmployee);
                context.SaveChanges();

                Console.WriteLine("New employee added successfully.");
            }
        }
    }
}

이 예제는 새 Employee 객체를 추가하고 데이터베이스에 저장합니다.

데이터 읽기 (Read)

using System;
using System.Linq;

namespace EFCoreCRUDExample
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var context = new AppDbContext())
            {
                var employees = context.Employees.ToList();

                foreach (var employee in employees)
                {
                    Console.WriteLine($"ID: {employee.Id}, Name: {employee.Name}, Position: {employee.Position}");
                }
            }
        }
    }
}

이 예제는 Employees 테이블에서 모든 데이터를 조회하고 출력합니다.

데이터 업데이트 (Update)

using System;
using System.Linq;

namespace EFCoreCRUDExample
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var context = new AppDbContext())
            {
                var employee = context.Employees.FirstOrDefault(e => e.Name == "Alice Johnson");

                if (employee != null)
                {
                    employee.Position = "Senior Software Engineer";
                    context.SaveChanges();

                    Console.WriteLine("Employee position updated successfully.");
                }
                else
                {
                    Console.WriteLine("Employee not found.");
                }
            }
        }
    }
}

이 예제는 특정 직원의 직위를 업데이트하고 변경 사항을 데이터베이스에 저장합니다.

데이터 삭제 (Delete)

using System;
using System.Linq;

namespace EFCoreCRUDExample
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var context = new AppDbContext())
            {
                var employee = context.Employees.FirstOrDefault(e => e.Name == "Alice Johnson");

                if (employee != null)
                {
                    context.Employees.Remove(employee);
                    context.SaveChanges();

                    Console.WriteLine("Employee deleted successfully.");
                }
                else
                {
                    Console.WriteLine("Employee not found.");
                }
            }
        }
    }
}

이 예제는 특정 직원을 삭제하고 데이터베이스에 변경 사항을 저장합니다.

결론 (Conclusion)

C#에서 데이터베이스 연동은 애플리케이션의 데이터 저장, 조회, 수정, 삭제 작업을 관리하는 중요한 과정입니다. ADO.NETEntity Framework는 각각 다른 접근 방식을 통해 데이터베이스와 상호작용할 수 있도록 합니다. ADO.NET은 저수준의 데이터베이스 작업을 제공하며, Entity Framework는 ORM 기능을 통해 더 높은 수준의 추상화된 데이터 조작을 지원합니다

Posted in C#

Leave a Reply

Your email address will not be published. Required fields are marked *