엑셀 파일을 WPF 애플리케이션에서 업로드하고 데이터를 읽어와서 데이터베이스에 삽입하는 방법

2025. 2. 28. 17:32젬스it

반응형

엑셀 파일을 WPF 애플리케이션에서 업로드하고 데이터를 읽어와서 데이터베이스에 삽입하는 방법을 단계별로 설명드릴게요. 이 과정에서는 `Microsoft.Office.Interop.Excel` 라이브러리를 사용하여 엑셀 파일을 읽고, `SqlConnection`을 사용하여 데이터를 인써트 하는 방법.

1. **프로젝트에 참조 추가:**
   - Visual Studio에서 프로젝트를 열고, `Microsoft.Office.Interop.Excel` 라이브러리를 추가합니다. NuGet 패키지 관리자에서 `Microsoft.Office.Interop.Excel`을 검색하여 설치할 수 있습니다.
   - 또한, `System.Data.SqlClient`를 참조로 추가해야 합니다.

2. **XAML 파일 디자인:**
   - 엑셀 파일을 선택하고 업로드할 수 있는 버튼과 상태를 표시할 레이블을 추가합니다.
   ```xml
   <Window x:Class="ExcelToDatabase.MainWindow"
           xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
           xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
           Title="Excel to Database" Height="200" Width="400">
       <Grid>
           <Button Name="btnUpload" Content="Upload Excel" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Width="100" Click="btnUpload_Click"/>
           <Label Name="lblStatus" Content="Status: Waiting for upload..." HorizontalAlignment="Left" Margin="10,50,0,0" VerticalAlignment="Top" Width="300"/>
       </Grid>
   </Window>
   ```

3. **C# 코드 작성:**
   - 엑셀 파일을 읽고 데이터베이스에 삽입하는 기능을 추가합니다.
   ```csharp
   using System;
   using System.Data.SqlClient;
   using System.Windows;
   using Microsoft.Office.Interop.Excel;
   using System.Runtime.InteropServices;

   namespace ExcelToDatabase
   {
       public partial class MainWindow : Window
       {
           public MainWindow()
           {
               InitializeComponent();
           }

           private void btnUpload_Click(object sender, RoutedEventArgs e)
           {
               // OpenFileDialog 생성
               var openFileDialog = new Microsoft.Win32.OpenFileDialog();
               openFileDialog.Filter = "Excel Files|*.xls;*.xlsx";

               if (openFileDialog.ShowDialog() == true)
               {
                   string filePath = openFileDialog.FileName;
                   lblStatus.Content = "Status: Reading Excel file...";

                   try
                   {
                       // 엑셀 파일 읽기
                       var excelApp = new Application();
                       var workBook = excelApp.Workbooks.Open(filePath);
                       var workSheet = (Worksheet)workBook.Sheets[1];
                       var range = workSheet.UsedRange;

                       // 데이터베이스 연결 및 데이터 삽입
                       using (var connection = new SqlConnection("YourConnectionStringHere"))
                       {
                           connection.Open();

                           for (int row = 2; row <= range.Rows.Count; row++)
                           {
                               string column1 = (range.Cells[row, 1] as Range).Text;
                               string column2 = (range.Cells[row, 2] as Range).Text;

                               string query = "INSERT INTO YourTable (Column1, Column2) VALUES (@column1, @column2)";
                               using (var command = new SqlCommand(query, connection))
                               {
                                   command.Parameters.AddWithValue("@column1", column1);
                                   command.Parameters.AddWithValue("@column2", column2);
                                   command.ExecuteNonQuery();
                               }
                           }
                       }

                       lblStatus.Content = "Status: Upload and insert complete!";
                       workBook.Close(false);
                       excelApp.Quit();

                       Marshal.ReleaseComObject(workSheet);
                       Marshal.ReleaseComObject(workBook);
                       Marshal.ReleaseComObject(excelApp);
                   }
                   catch (Exception ex)
                   {
                       lblStatus.Content = "Status: Error occurred!";
                       MessageBox.Show(ex.Message);
                   }
               }
           }
       }
   }
   ```

이 예제는 엑셀 파일의 첫 번째 시트에서 데이터를 읽어와 `YourTable`이라는 데이터베이스 테이블에 데이터를 삽입하는 방법을 보여줍니다. 실제로 사용하려면 적절한 연결 문자열과 테이블 이름으로 대체해야 합니다.

반응형