wpf에서 oledb를 이용해서 엑셀파일을 업로드해서 해당 내용을 db에 넣는 방법은?

2025. 3. 5. 16:31젬스it

반응형

아래 코드는 파일 선택 대화상자를 사용하여 사용자가 원하는 엑셀 파일을 선택하고, 해당 파일을 OLEDB를 이용해 업로드하는 WPF 애플리케이션의 예제입니다.




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

2. **코드 비하인드**:
   - 파일 선택 대화상자를 열어 엑셀 파일을 선택하고, 선택된 파일을 OLEDB를 이용해 업로드합니다.
   ```csharp
   using System;
   using System.Data;
   using System.Data.OleDb;
   using System.Data.SqlClient;
   using System.Windows;
   using Microsoft.Win32;

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

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

           private void UploadExcelFile(string filePath)
           {
               string excelConnectionString = $"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={filePath};Extended Properties='Excel 12.0 Xml;HDR=YES;'";
               DataTable dt = new DataTable();

               using (OleDbConnection conn = new OleDbConnection(excelConnectionString))
               {
                   conn.Open();
                   OleDbCommand cmd = new OleDbCommand("SELECT * FROM [Sheet1$]", conn);
                   OleDbDataAdapter adapter = new OleDbDataAdapter(cmd);
                   adapter.Fill(dt);
               }

               string dbConnectionString = "Your database connection string";
               #mssql일경우
               string dbConnectionString = "Server=your_server_name;Database=your_database_name;User Id=your_username;Password=your_password;";
                #mysql 일경우
                string dbConnectionString = "Server=your_server_name;Database=your_database_name;Uid=your_username;Pwd=your_password;";


               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);
           }
       }
   }
   ```

이 코드는 파일 선택 대화상자를 사용하여 사용자가 원하는 엑셀 파일을 선택하고, 해당 파일을 OLEDB를 이용해 데이터베이스에 업로드하는 예제입니다.

이 오류는 Microsoft Access Database Engine이 설치되어 있지 않거나, 32비트와 64비트 버전의 불일치로 인해 발생할 수 있습니다. 다음 단계를 따라 문제를 해결해 보세요:

1. **Microsoft Access Database Engine 설치**:
   - [Microsoft Access Database Engine 2010 Redistributable](https://gseek.pe.kr/6937/) 또는 [Microsoft Access Database Engine 2016 Redistributable](https://m.blog.naver.com/horizon87/221002947851)을 다운로드하여 설치합니다. 사용 중인 시스템에 맞는 32비트 또는 64비트 버전을 선택하세요.

2. **프로젝트의 플랫폼 대상 설정**:
   - Visual Studio에서 프로젝트를 열고, `프로젝트` 메뉴에서 `속성`을 선택합니다.
   - `빌드` 탭에서 `플랫폼 대상`을 `x86` 또는 `x64`로 설정합니다. 이 설정은 설치한 Access Database Engine의 버전에 맞춰야 합니다.

3. **명령줄에서 설치**:
   - 만약 32비트와 64비트 Office 제품이 혼합되어 있는 경우, 명령줄에서 다음 명령을 실행하여 설치할 수 있습니다:
     ```sh
     AccessDatabaseEngine.exe /passive
     ```

이 단계를 따라 오류를 해결할 수 있습니다.

[A](https://gseek.pe.kr/6937/?copilot_analytics_metadata=eyJldmVudEluZm9fY2xpY2tTb3VyY2UiOiJjaXRhdGlvbkxpbmsiLCJldmVudEluZm9fY29udmVyc2F0aW9uSWQiOiI1WmtlNndBcDRWZXR2QmRSOUNpbXYiLCJldmVudEluZm9fbWVzc2FnZUlkIjoiQng1OEZOQURzWnd3ejdjNFhleUJYIiwiZXZlbnRJbmZvX2NsaWNrRGVzdGluYXRpb24iOiJodHRwczpcL1wvZ3NlZWsucGUua3JcLzY5MzdcLyJ9&citationMarker=9F742443-6C92-4C44-BF58-8F5A7C53B6F1): [Microsoft Access Database Engine 2010 Redistributable](https://www.microsoft.com/ko-kr/download/details.aspx?id=13255)
[B](https://m.blog.naver.com/horizon87/221002947851?copilot_analytics_metadata=eyJldmVudEluZm9fY2xpY2tTb3VyY2UiOiJjaXRhdGlvbkxpbmsiLCJldmVudEluZm9fY2xpY2tEZXN0aW5hdGlvbiI6Imh0dHBzOlwvXC9tLmJsb2cubmF2ZXIuY29tXC9ob3Jpem9uODdcLzIyMTAwMjk0Nzg1MSIsImV2ZW50SW5mb19jb252ZXJzYXRpb25JZCI6IjVaa2U2d0FwNFZldHZCZFI5Q2ltdiIsImV2ZW50SW5mb19tZXNzYWdlSWQiOiJCeDU4Rk5BRHNad3d6N2M0WGV5QlgifQ%3D%3D&citationMarker=9F742443-6C92-4C44-BF58-8F5A7C53B6F1): [Microsoft Access Database Engine 2016 Redistributable](https://www.microsoft.com/ko-KR/download/details.aspx?id=54920)


반응형