푸터 콘텐츠로 바로가기
IRONXL 사용하여

C#에서 Excel 파일을 SQL Server로 가져오는 방법

여러 다른 비즈니스 컨텍스트에서 Excel에서 SQL Server로 데이터를 가져오는 것은 일반적인 필요입니다. Excel 파일에서 데이터를 읽고 이를 SQL Server 데이터베이스로 입력하는 것이 이 활동에 포함된 작업입니다. 내보내기 마법사가 종종 사용되지만, IronXL은 데이터 처리에 대한 더 프로그래밍적이고 유연한 접근 방식을 제공합니다. IronXL은 파일에서 Excel 데이터를 가져올 수 있는 강력한 C# 라이브러리입니다; 따라서 이 작업을 가속화할 수 있습니다. 이를 위해 이 게시물에서는 C#을 사용하여 Excel에서 SQL Server로의 가져오기 설정, 실행 및 개선에 대한 철저한 가이드를 제공합니다.

C#에서 Excel을 SQL Server로 가져오는 방법: 그림 1 - IronXL: C# Excel 라이브러리

How to Import Excel to SQL Server in C#

  1. 개발 환경 설정
  2. Excel 파일 준비
  3. SQL Server 데이터베이스에 연결
  4. IronXL을 사용하여 Excel 파일에서 데이터 읽기
  5. IronPDF를 사용하여 데이터 내보내기 및 PDF 보고서 생성
  6. PDF 보고서 검토

IronXL이란 무엇인가요?

IronXL은 때때로 IronXl.Excel이라고도 불리며, .NET 응용 프로그램에서 Excel 파일 작업을 쉽게 할 수 있도록 설계된 기능이 풍부한 C# 라이브러리입니다. 이 강력한 도구는 서버측 응용 프로그램에 이상적이며 개발자가 컴퓨터에 Microsoft Excel을 설치할 필요 없이 Excel 파일을 읽고, 생성하고, 편집할 수 있게 합니다. IronXL은 Excel 2007 이후 버전(.xlsx) 및 Excel 97–2003 버전(.xls)을 지원하여 다양한 Excel 파일 버전 관리를 제공합니다. 워크시트, 행, 열을 조작하는 것 외에도 데이터를 삽입, 업데이트 및 제거하는 것과 같은 중요한 데이터 조작을 허용합니다.

IronXL은 복잡하고 잘 형식화된 스프레드시트를 프로그래밍 방식으로 생성할 수 있도록 셀 서식 및 Excel 수식도 지원합니다. 성능 최적화 및 .NET Framework, .NET Core, .NET 5/6을 포함한 여러 .NET 플랫폼과의 호환성을 통해 IronXL은 대규모 데이터셋을 효과적으로 처리합니다. 간단한 데이터 가져오기/내보내기 작업이나 복잡한 보고 시스템을 위한 응용 프로그램에 Excel 파일 작업을 통합하려는 개발자에게 유연한 옵션이며, 다른 .NET Framework와의 매끄러운 인터페이스 덕분에 가능성 있는 선택입니다.

주요 특징

Excel 파일 읽기 및 쓰기

개발자는 IronXL을 사용하여 Excel 파일에서 데이터를 읽고 쓸 수 있습니다. 새 Excel 파일을 만들고 기존 파일을 편집하는 것이 간단합니다.

Microsoft Excel 설치가 필요 없음

IronXL은 다른 라이브러리와 달리 응용 프로그램을 호스팅하는 컴퓨터에 Microsoft Excel을 설치할 필요가 없습니다. 서버 측 앱에 이상적입니다.

다양한 Excel 형식 지원

.xls(Excel 97-2003) 및 .xlsx(Excel 2007 이후) 형식을 지원함으로써 다양한 Excel 파일 유형을 관리하는 데 있어서 다재다능함을 제공합니다.

새로운 Visual Studio 프로젝트 생성하기

Visual Studio 콘솔 프로젝트는 간단하게 생성할 수 있습니다. Visual Studio에서 콘솔 애플리케이션을 생성하려면 다음 작업을 수행하십시오:

  1. Visual Studio 열기: Visual Studio가 컴퓨터에 설치되어 있는지 확인한 후 엽니다.
  2. 새 프로젝트 시작: File -> New -> Project을 선택합니다.

C#에서 Excel을 SQL Server로 가져오는 방법: 그림 2 - 새로 만들기 클릭

  1. Create a new project 창의 왼쪽 패널에서 선호하는 프로그래밍 언어를 선택합니다—예를 들어, C#.
  2. 사용할 수 있는 프로젝트 템플릿 목록에서 Console App 또는 Console App (.NET Core) 템플릿을 선택합니다.
  3. 이름 영역에 프로젝트의 이름을 지정합니다.

C#에서 Excel을 SQL Server로 가져오는 방법: 그림 3 - 이름과 저장 위치 제공

  1. 프로젝트를 저장할 위치를 결정하십시오.
  2. 생성을 클릭하여 콘솔 애플리케이션 프로젝트를 시작합니다.

C#에서 Excel을 SQL Server로 가져오는 방법: 그림 4 - 마지막으로 생성을 클릭하여 애플리케이션을 시작합니다

IronXL 라이브러리 설치하기

다가오는 업데이트 때문에 IronXL 라이브러리를 설치해야 합니다. 마지막으로 절차를 완료하기 위해 NuGet 패키지 관리자 콘솔을 실행하고 다음 명령을 입력하십시오:

Install-Package IronXl.Excel

C#에서 Excel을 SQL Server로 가져오는 방법: 그림 5 - IronXL을 설치하기 위해 위 명령을 NuGet 패키지 관리자 콘솔에 입력

NuGet 패키지 관리자를 사용하여 IronXL 패키지를 검색하는 것이 또 다른 방법입니다. 이렇게 하면 IronXL과 관련된 어떤 NuGet 패키지를 다운로드할지 선택할 수 있습니다.

C#에서 Excel을 SQL Server로 가져오는 방법: 그림 6 - 대안적으로 IronXL을 NuGet 패키지 관리자에서 검색하여 설치

IronXL로 Excel을 SQL로 가져오기

IronXL을 사용한 Excel 데이터 읽기

IronXL로 Excel 파일의 데이터를 읽는 프로세스가 더 쉬워졌습니다. 다음 예제는 IronXL을 사용하여 Excel 파일의 데이터를 읽는 방법을 보여줍니다. 이 방법으로 데이터를 읽고 각 행이 Excel 시트의 행에 해당하는 사전 목록에 저장합니다.

using IronXL;
using System;
using System.Collections.Generic;

public class ExcelReader
{
    public static List<Dictionary<string, object>> ReadExcelFile(string filePath)
    {
        // Initialize a list to store data from Excel
        var data = new List<Dictionary<string, object>>();

        // Load the workbook from the file path provided
        WorkBook workbook = WorkBook.Load(filePath);

        // Access the first worksheet in the workbook
        WorkSheet sheet = workbook.WorkSheets[0];

        // Retrieve column headers from the first row
        var headers = new List<string>();
        foreach (var header in sheet.Rows[0].Columns)
        {
            headers.Add(header.ToString());
        }

        // Loop through each row starting from the second row
        for (int i = 1; i < sheet.Rows.Count; i++)
        {
            // Create a dictionary to store the row data associated with column headers
            var rowData = new Dictionary<string, object>();
            for (int j = 0; j < headers.Count; j++)
            {
                rowData[headers[j]] = sheet.Rows[i][j].Value;
            }
            data.Add(rowData);
        }

        return data;
    }
}
using IronXL;
using System;
using System.Collections.Generic;

public class ExcelReader
{
    public static List<Dictionary<string, object>> ReadExcelFile(string filePath)
    {
        // Initialize a list to store data from Excel
        var data = new List<Dictionary<string, object>>();

        // Load the workbook from the file path provided
        WorkBook workbook = WorkBook.Load(filePath);

        // Access the first worksheet in the workbook
        WorkSheet sheet = workbook.WorkSheets[0];

        // Retrieve column headers from the first row
        var headers = new List<string>();
        foreach (var header in sheet.Rows[0].Columns)
        {
            headers.Add(header.ToString());
        }

        // Loop through each row starting from the second row
        for (int i = 1; i < sheet.Rows.Count; i++)
        {
            // Create a dictionary to store the row data associated with column headers
            var rowData = new Dictionary<string, object>();
            for (int j = 0; j < headers.Count; j++)
            {
                rowData[headers[j]] = sheet.Rows[i][j].Value;
            }
            data.Add(rowData);
        }

        return data;
    }
}
$vbLabelText   $csharpLabel

SQL Server에 연결하기

SQL Server에 연결하기 위해 SqlConnection 클래스를 System.Data.SqlClient 네임스페이스에서 사용합니다. 일반적으로 데이터베이스 이름, 서버 이름, 인증 정보로 구성되는 올바른 연결 문자열을 가지고 있는지 확인하십시오. SQL Server 데이터베이스 연결 및 데이터 추가 방법은 다음 예제에서 다룹니다.

using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;

public class SqlServerConnector
{
    private string connectionString;

    // Constructor accepts a connection string
    public SqlServerConnector(string connectionString)
    {
        this.connectionString = connectionString;
    }

    // Inserts data into the specified table
    public void InsertData(Dictionary<string, object> data, string tableName)
    {
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            connection.Open();

            // Construct an SQL INSERT command with parameterized values to prevent SQL injection
            var columns = string.Join(",", data.Keys);
            var parameters = string.Join(",", data.Keys.Select(key => "@" + key));
            string query = $"INSERT INTO {tableName} ({columns}) VALUES ({parameters})";

            using (SqlCommand command = new SqlCommand(query, connection))
            {
                // Add parameters to the command
                foreach (var kvp in data)
                {
                    command.Parameters.AddWithValue("@" + kvp.Key, kvp.Value ?? DBNull.Value);
                }

                // Execute the command
                command.ExecuteNonQuery();
            }
        }
    }
}
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;

public class SqlServerConnector
{
    private string connectionString;

    // Constructor accepts a connection string
    public SqlServerConnector(string connectionString)
    {
        this.connectionString = connectionString;
    }

    // Inserts data into the specified table
    public void InsertData(Dictionary<string, object> data, string tableName)
    {
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            connection.Open();

            // Construct an SQL INSERT command with parameterized values to prevent SQL injection
            var columns = string.Join(",", data.Keys);
            var parameters = string.Join(",", data.Keys.Select(key => "@" + key));
            string query = $"INSERT INTO {tableName} ({columns}) VALUES ({parameters})";

            using (SqlCommand command = new SqlCommand(query, connection))
            {
                // Add parameters to the command
                foreach (var kvp in data)
                {
                    command.Parameters.AddWithValue("@" + kvp.Key, kvp.Value ?? DBNull.Value);
                }

                // Execute the command
                command.ExecuteNonQuery();
            }
        }
    }
}
$vbLabelText   $csharpLabel

IronXL과 SQL Server 결합하기

Excel 파일을 읽고 SQL 데이터베이스에 데이터를 삽입하는 논리가 수립되면 이 기능을 통합하여 가져오기를 완료하십시오. 다음 애플리케이션은 Excel 파일에서 정보를 가져와 Microsoft SQL Server 데이터베이스에 추가합니다.

using System;
using System.Collections.Generic;

class Program
{
    static void Main(string[] args)
    {
        // Define the path to the Excel file, SQL connection string, and target table name
        string excelFilePath = "path_to_your_excel_file.xlsx";
        string connectionString = "your_sql_server_connection_string";
        string tableName = "your_table_name";

        // Read data from Excel
        List<Dictionary<string, object>> excelData = ExcelReader.ReadExcelFile(excelFilePath);

        // Create an instance of the SQL connector and insert data
        SqlServerConnector sqlConnector = new SqlServerConnector(connectionString);
        foreach (var row in excelData)
        {
            sqlConnector.InsertData(row, tableName);
        }

        Console.WriteLine("Data import completed successfully.");
    }
}
using System;
using System.Collections.Generic;

class Program
{
    static void Main(string[] args)
    {
        // Define the path to the Excel file, SQL connection string, and target table name
        string excelFilePath = "path_to_your_excel_file.xlsx";
        string connectionString = "your_sql_server_connection_string";
        string tableName = "your_table_name";

        // Read data from Excel
        List<Dictionary<string, object>> excelData = ExcelReader.ReadExcelFile(excelFilePath);

        // Create an instance of the SQL connector and insert data
        SqlServerConnector sqlConnector = new SqlServerConnector(connectionString);
        foreach (var row in excelData)
        {
            sqlConnector.InsertData(row, tableName);
        }

        Console.WriteLine("Data import completed successfully.");
    }
}
$vbLabelText   $csharpLabel

이 클래스는 주어진 Excel 파일에서 IronXL을 사용하여 데이터를 읽는 역할을 담당합니다. ReadExcelFile 기능은 Excel 통합문서를 로드하고, 첫 번째 워크시트를 열고, 데이터 워크시트의 행을 반복하여 데이터를 수집합니다. 테이블 처리 용이성을 위해 정보는 사전 목록에 저장됩니다.

C#에서 Excel을 SQL Server로 가져오는 방법: 그림 7 - 입력 예제 Excel 파일

이 클래스는 지정된 데이터베이스 테이블에 데이터를 삽입하며 SQL Server 데이터베이스와의 연결을 관리합니다. InsertData 메소드는 SQL 삽입을 방지하기 위해 매개변수화된 쿼리를 사용하며 사전의 키에 기반하여 SQL INSERT 쿼리를 동적으로 생성합니다, 이는 열 이름을 나타냅니다.

Excel 파일에서 SQL 테이블로 데이터를 읽기 위해 ExcelReader 클래스를 사용하고, SQL Server 테이블에 각 행을 삽입하기 위해 SqlServerConnector 클래스를 사용하여 Main 기능이 전체 프로세스를 관리합니다.

C#에서 Excel을 SQL Server로 가져오는 방법: 그림 8 - SQL Server에서 성공적인 쿼리를 보여주는 출력

오류 처리 및 최적화는 견고하고 효율적인 가져오기 프로세스를 보장하는 데 중요합니다. 견고한 오류 처리를 구현하면 누락된 파일, 잘못된 데이터 형식, SQL 예외와 같은 잠재적인 문제를 관리할 수 있습니다. 오류 처리 도입의 예시는 다음과 같습니다.

try
{
    // Insert the importing logic here
}
catch (Exception ex)
{
    Console.WriteLine("An error occurred: " + ex.Message);
}
try
{
    // Insert the importing logic here
}
catch (Exception ex)
{
    Console.WriteLine("An error occurred: " + ex.Message);
}
$vbLabelText   $csharpLabel

결론

마지막으로, .NET 애플리케이션 내에서 Excel 파일을 관리하는 효과적이고 신뢰할 수 있는 방법은 C#과 IronXL을 사용하여 Excel 데이터를 MS SQL 데이터베이스에 가져오는 것입니다. IronXL은 여러 Excel 형식과 호환되며 Microsoft Excel을 설치하지 않고도 Excel 데이터를 읽고 쓰는 것이 더 쉬워지는 강력한 기능을 가지고 있습니다. System.Data.SqlClient과 IronXL의 통합을 통해 개발자는 매개변수화된 쿼리를 사용하여 보안을 향상하고 SQL 삽입을 방지하며 SQL Servers 간에 데이터를 쉽게 이동할 수 있습니다.

마지막으로 IronXL과 Iron Software를 .NET 개발 도구 모음에 추가하면 Excel을 효율적으로 조작하고 PDF를 생성하고 OCR을 수행하며 바코드를 활용할 수 있습니다. IronXL의 사용 편리성, 상호 운용성 및 성능을 Iron Software의 유연한 제품군과 결합하여 원활한 개발 및 애플리케이션 기능 향상을 보장합니다. 프로젝트의 요구에 맞춰 맞춤화된 명확한 라이선스 옵션을 통해 개발자는 올바른 모델을 자신 있게 선택할 수 있습니다. 이러한 이점을 활용하면 개발자는 준수성과 개방성을 유지하면서 다양한 문제를 효과적으로 해결할 수 있습니다.

자주 묻는 질문

C#을 사용하여 Excel 데이터를 SQL Server로 가져오는 가장 좋은 방법은 무엇입니까?

IronXL 라이브러리를 사용하면 Microsoft Excel이 설치되어 있지 않아도 Excel 파일을 읽고 데이터를 데이터베이스에 삽입하여 Excel 데이터를 SQL Server로 효율적으로 가져올 수 있습니다.

Microsoft Excel을 사용하지 않고 C#에서 Excel 파일을 읽는 방법은 무엇인가요?

IronXL 사용하면 Microsoft Excel 없이도 C#에서 Excel 파일을 읽을 수 있습니다. 간단한 메서드를 사용하여 Excel 통합 문서를 불러오고, 워크시트에 접근하고, 데이터를 추출할 수 있습니다.

C# 애플리케이션에서 Excel 파일을 SQL Server에 연결하는 단계는 무엇입니까?

먼저 IronXL 사용하여 Excel 파일을 읽습니다. 그런 다음 SqlConnection 클래스를 사용하여 SQL Server에 연결하고 SqlCommand 사용하여 SQL 데이터베이스에 데이터를 삽입합니다.

.NET 애플리케이션에서 Excel 작업을 수행할 때 IronXL 사용해야 하는 이유는 무엇입니까?

IronXL 효율적인 데이터 처리, 다양한 .NET 플랫폼과의 호환성을 제공하며 Excel 설치가 필요하지 않으므로 서버 측 애플리케이션 및 대규모 데이터 세트 처리에 이상적입니다.

C#에서 대용량 Excel 데이터셋을 어떻게 처리해야 할까요?

IronXL 대규모 데이터 세트를 강력하게 지원하여 Excel 파일의 데이터를 효율적으로 읽고 조작하며 성능 문제 없이 애플리케이션에 통합할 수 있도록 합니다.

Excel 파일을 SQL Server로 가져올 때 어떤 오류 처리 전략을 사용해야 할까요?

파일을 찾을 수 없음, 잘못된 데이터 형식 또는 SQL 예외와 같은 잠재적인 오류를 처리하기 위해 try-catch 블록을 구현하여 원활한 가져오기 프로세스를 보장하십시오.

C# 애플리케이션에서 Excel 데이터를 SQL Server로 가져오는 작업을 자동화할 수 있을까요?

네, IronXL 사용하면 C# 애플리케이션을 작성하여 Excel 파일을 읽고 최소한의 수동 작업으로 데이터를 SQL Server에 삽입함으로써 가져오기 프로세스를 자동화할 수 있습니다.

C#에서 매개변수화된 쿼리는 SQL 인젝션을 어떻게 방지합니까?

C#의 매개변수화된 쿼리를 사용하면 SQL 명령의 매개변수에 대한 자리 표시자를 사용하여 SQL Server에 안전하게 데이터를 삽입할 수 있으므로 SQL 인젝션 공격을 방지하는 데 도움이 됩니다.

엑셀 데이터를 SQL Server로 가져올 때 성능을 최적화하려면 어떻게 해야 할까요?

일괄 삽입을 사용하고, IronXL 을 통해 대규모 데이터 세트를 효율적으로 처리하며, SQL Server 연결 및 명령이 올바르게 구성되었는지 확인하여 성능을 최적화하십시오.

프로젝트에서 IronXL 사용하기 위한 라이선스 옵션은 무엇인가요?

IronXL 프로젝트 요구 사항에 맞춘 유연한 라이선스 옵션을 제공하여 개발자가 애플리케이션 요구 사항과 예산에 가장 적합한 플랜을 선택할 수 있도록 합니다.

커티스 차우
기술 문서 작성자

커티스 차우는 칼턴 대학교에서 컴퓨터 과학 학사 학위를 취득했으며, Node.js, TypeScript, JavaScript, React를 전문으로 하는 프론트엔드 개발자입니다. 직관적이고 미적으로 뛰어난 사용자 인터페이스를 만드는 데 열정을 가진 그는 최신 프레임워크를 활용하고, 잘 구성되고 시각적으로 매력적인 매뉴얼을 제작하는 것을 즐깁니다.

커티스는 개발 분야 외에도 사물 인터넷(IoT)에 깊은 관심을 가지고 있으며, 하드웨어와 소프트웨어를 통합하는 혁신적인 방법을 연구합니다. 여가 시간에는 게임을 즐기거나 디스코드 봇을 만들면서 기술에 대한 애정과 창의성을 결합합니다.

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me