wpf 에서 excelDataReader.dll 을 이용해서 엑셀파일을 업로드해서 데이터를 db에 넣기

2025. 3. 7. 11:27젬스it

반응형

CodePagesEncodingProvider가 표시되지 않는다면, 몇 가지 점검해야 할 사항이 있습니다. `ExcelDataReader` 라이브러리를 사용할 때, .NET Core 또는 .NET Framework에서 `CodePagesEncodingProvider`를 사용할 수 있도록 해주어야 합니다.

1. **ExcelDataReader 초기화**:
   - `System.Text.Encoding.CodePages` 패키지를 설치해야 합니다.
   - NuGet 패키지 관리자를 열고 다음 명령어를 입력하여 설치합니다:
     ```powershell
     Install-Package System.Text.Encoding.CodePages
     ```

2. **코드 수정**:
   - `System.Text.Encoding.CodePages`를 참조한 다음, `CodePagesEncodingProvider`를 등록합니다.
   ```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();
               openFileDialog.Filter = "Excel Files|*.xls;*.xlsx";
               if (openFileDialog.ShowDialog() == 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 result = reader.AsDataSet(new ExcelDataSetConfiguration()
                       {
                           ConfigureDataTable = (_) => new ExcelDataTableConfiguration()
                           {
                               UseHeaderRow = true
                           }
                       });

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

위 코드를 통해 `Encoding.RegisterProvider(CodePagesEncodingProvider.Instance)`를 사용하여 `CodePagesEncodingProvider`를 등록하고 사용할 수 있습니다.

이 단계를 통해 문제가 해결되기를 바랍니다. 추가로 궁금한 사항이 있으면 언제든지 말씀해 주세요! 😊 [A](https://github.com/NarubetUTL/UTL.PartMaster/tree/eb99d9ec5c8d16a3de1c2cae0b4add46878fbd19/Authentication%2FMainMDI.cs?copilot_analytics_metadata=eyJldmVudEluZm9fY2xpY2tTb3VyY2UiOiJjaXRhdGlvbkxpbmsiLCJldmVudEluZm9fY29udmVyc2F0aW9uSWQiOiI1WmtlNndBcDRWZXR2QmRSOUNpbXYiLCJldmVudEluZm9fbWVzc2FnZUlkIjoiNFBkRDFCOEFMVjVqbU5EUVp5MlFHIiwiZXZlbnRJbmZvX2NsaWNrRGVzdGluYXRpb24iOiJodHRwczpcL1wvZ2l0aHViLmNvbVwvTmFydWJldFVUTFwvVVRMLlBhcnRNYXN0ZXJcL3RyZWVcL2ViOTlkOWVjNWM4ZDE2YTNkZTFjMmNhZTBiNGFkZDQ2ODc4ZmJkMTlcL0F1dGhlbnRpY2F0aW9uJTJGTWFpbk1ESS5jcyJ9&citationMarker=9F742443-6C92-4C44-BF58-8F5A7C53B6F1)

반응형