닷넷 프레임워크 4.6.1 환경에서 WPF로 `ExcelDataReader`를 사용하여 엑셀 파일을 업로드하고 데이터를 데이터베이스에 넣는방법

2025. 3. 10. 09:31젬스it

반응형

닷넷 프레임워크 4.6.1 환경에서 WPF로 `ExcelDataReader`를 사용하여 엑셀 파일을 업로드하고 데이터를 데이터베이스에 넣는
예제를 제공해 드리겠습니다. `ExcelDataReader`의 버전은 3.6.0을 사용하는 것이 좋습니다.

1. **필수 패키지 설치**:
   - 인터넷이 연결된 컴퓨터에서 [ExcelDataReader](https://www.nuget.org/packages/ExcelDataReader/)와 [ExcelDataReader.DataSet](https://www.nuget.org/packages/ExcelDataReader.DataSet/) 패키지를 다운로드합니다.
   - 다운로드한 `.nupkg` 파일을 인터넷이 연결되지 않은 컴퓨터로 복사합니다.
   - `.nupkg` 파일의 확장자를 `.zip`으로 변경한 후 압축 해제합니다.
   - 압축 해제된 폴더에서 필요한 `.dll` 파일을 찾습니다.

2. **Visual Studio에서 참조 추가**:
   - Visual Studio에서 프로젝트를 열고, 솔루션 탐색기에서 프로젝트 이름을 마우스 오른쪽 버튼으로 클릭합니다.
   - `참조 추가`를 선택합니다.
   - `찾아보기` 버튼을 클릭하고, 압축을 해제한 폴더에서 `ExcelDataReader.dll` 및 `ExcelDataReader.DataSet.dll` 파일을 선택합니다.
   - `확인` 버튼을 클릭하여 참조를 추가합니다.

3. **WPF XAML 구성**:
   - 버튼을 클릭하여 파일 선택 대화상자를 열고 엑셀 파일을 선택할 수 있도록 합니다.
   ```xml
   <UserControl x:Class="ExcelUploader.UploadControl"
                xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                Height="200" Width="400">
       <Border BorderBrush="Black" BorderThickness="1" Padding="10" Margin="10">
           <Grid>
               <Button Content="엑셀 파일 업로드" HorizontalAlignment="Center" VerticalAlignment="Center" Click="UploadButton_Click"/>
           </Grid>
       </Border>
   </UserControl>
   ```

4. **코드 비하인드**:
   - 파일 선택 대화상자를 열어 엑셀 파일을 선택하고, 선택된 파일을 `ExcelDataReader`를 이용해 읽어 데이터베이스에 업로드합니다.
   ```csharp
   using System;
   using System.Data;
   using System.Data.SqlClient;
   using System.IO;
   using System.Windows;
   using System.Windows.Controls;
   using Microsoft.Win32;
   using ExcelDataReader;
   using System.Text;

   namespace ExcelUploader
   {
       public partial class UploadControl : UserControl
       {
           public UploadControl()
           {
               InitializeComponent();
               // ExcelDataReader 초기화 (시작 시 코드 페이지 등록)
               Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
           }

           private void UploadButton_Click(object sender, RoutedEventArgs e)
           {
               OpenFileDialog openFileDialog = new OpenFileDialog
               {
                   Filter = "Excel Files|*.xls;*.xlsx"
               };
               bool? result = openFileDialog.ShowDialog();
               if (result == true)
               {
                   string filePath = openFileDialog.FileName;
                   UploadExcelFile(filePath);
               }
           }

           private void UploadExcelFile(string filePath)
           {
               DataTable dt = new DataTable();

               using (var stream = File.Open(filePath, FileMode.Open, FileAccess.Read))
               {
                   using (var reader = ExcelReaderFactory.CreateReader(stream))
                   {
                       var conf = new ExcelDataSetConfiguration
                       {
                           ConfigureDataTable = _ => new ExcelDataTableConfiguration
                           {
                               UseHeaderRow = true
                           }
                       };
                       var result = reader.AsDataSet(conf);
                       dt = result.Tables[0];
                   }
               }

               string dbConnectionString = "Your database connection string";

               using (SqlConnection sqlConn = new SqlConnection(dbConnectionString))
               {
                   sqlConn.Open();
                   foreach (DataRow row in dt.Rows)
                   {
                       SqlCommand sqlCmd = new SqlCommand("INSERT INTO YourTableName (Column1, Column2) VALUES (@Column1, @Column2)", sqlConn);
                       sqlCmd.Parameters.AddWithValue("@Column1", row["Column1"]);
                       sqlCmd.Parameters.AddWithValue("@Column2", row["Column2"]);
                       sqlCmd.ExecuteNonQuery();
                   }
               }

               MessageBox.Show("엑셀 파일이 성공적으로 업로드되었습니다.", "업로드 완료", MessageBoxButton.OK, MessageBoxImage.Information);
           }
       }
   }
   ```

이 코드는 `ExcelDataReader`를 사용하여 엑셀 파일을 읽고 데이터를 데이터베이스에 삽입하는 WPF 애플리케이션입니다.

반응형