Thứ Hai, 22 tháng 4, 2019

Chèn vào cơ sở dữ liệu từ tệp CSV

Đăng Bởi: Admin - tháng 4 22, 2019 - 0 Bình Luận

Chèn vào cơ sở dữ liệu từ tệp CSV

Hình 3 cho Chèn vào cơ sở dữ liệu từ tệp CSV

Giới thiệu

Hầu hết các trường hợp chúng tôi nhận dữ liệu từ khách hàng của mình dưới dạng tệp csv. Vì vậy, chúng tôi đã phải nhập dữ liệu từ tệp csv vào cơ sở dữ liệu. Nó đã trở thành một thông lệ mà chúng ta cần chức năng này hàng ngày. Vì vậy, tôi quyết định xây dựng một dự án sẽ thực hiện nhiệm vụ này cho tôi mỗi khi tôi cần.

Sử dụng mã

Vì chúng tôi muốn chèn dữ liệu từ CSV vào cơ sở dữ liệu nên chúng tôi sẽ cần phải làm theo một số bước để làm như vậy. Tôi đã sử dụng Lumenworks như một bên thứ ba để thực hiện nhiệm vụ này. Có một công cụ bên thứ ba khác thực hiện nhiệm vụ tương tự như Lumenworks là GemBox. Nhưng vấn đề là GemBox không hỗ trợ chèn dữ liệu hơn 150 hàng cùng một lúc. Vì vậy, tôi quyết định sử dụng Lumenwork.
Họ đây rồi:
Bước 1: Đầu tiên chúng ta cần lưu ý rằng vấn đề bảo mật xuất hiện trước. Vì vậy, chúng tôi cần xác thực tệp đầu vào mà chúng tôi đang đặt tệp csv hợp lệ. Chúng tôi sẽ không thực hiện bất kỳ hoạt động nào nếu định dạng tệp không hợp lệ.
Tôi muốn giải quyết vấn đề bảo mật này ở phía khách hàng. Vì vậy, tôi đã đính kèm một trình xác nhận trường bắt buộc có thuộc tính "ControlToValidate" trỏ tệp asp.net được tải lên. Để xác thực định dạng tệp, tôi đã thêm một tệp ExpressExpressionValidator với ValidationExpression = "^. * \. (Csv | CSV) $". Vì vậy, bây giờ tôi có thể xác nhận định dạng tệp của tệp được tải lên từ phía khách hàng. Vì vậy, chúng tôi đã hoàn thành tiêu chí đầu tiên của chúng tôi về vấn đề bảo mật của định dạng tệp.
Dưới đây là mã mẫu để xác thực phía máy khách để kiểm tra định dạng tệp hợp lệ mà chúng tôi muốn chấp nhận.
<asp:FileUpload ID="flucsv" runat="server" />
<asp:RequiredFieldValidator ID="rfvCSV" runat="server" ErrorMessage="Please Select a file first"
     ValidationGroup="validate" Display="Dynamic" ControlToValidate="flucsv">
</asp:RequiredFieldValidator>
<asp:RegularExpressionValidator ID="revCSV" runat="server" ErrorMessage="Upload .CSV File only"
     ValidationGroup="validate" Display="Dynamic" ValidationExpression="^.*\.(csv|CSV)$"
     ControlToValidate="flucsv">
</asp:RegularExpressionValidator>
<asp:Button ID="btnUpload" Text="Upload" runat="server" OnClick="UploadCsvDataToDatabase"
            CausesValidation="true" ValidationGroup="validate" />
Bước 2: Chúng tôi đã xác nhận tệp đầu vào. Bây giờ chúng ta cần lưu nó trong máy chủ. Trong dự án của tôi, tôi đã tách nhiệm vụ chèn vào thành hai.  
  1. Đầu tiên tôi sẽ lưu tệp trong cơ sở dữ liệu và nếu tôi có thể lưu tệp thành công thì nhiệm vụ của tôi đã hoàn thành một nửa. 
  2. Thứ hai, tôi sẽ chèn dữ liệu từ tệp đã lưu và sửa đổi hoặc thêm trường cột bổ sung nếu tôi cần làm như vậy. 
Đây là đoạn mã kiểm tra nếu có một tệp có cùng tên đã tồn tại trên máy chủ nếu vậy thì xóa tệp đó và lưu tệp mới.  
private string DeleteAndSaveCsvFile(string physicalTempFilePath, FileUpload inputFile, string contentType)
{
    if (contentType == "application/vnd.ms-excel"
        || contentType == "application/ms-excel"
        || contentType == "application/x-zip-compressed"
        || contentType == "application/octet-stream"
        || contentType == "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
        || contentType == "text/csv")
      {
        physicalTempFilePath = "~/CSV/" + Path.GetFileName(inputFile.FileName);
        physicalTempFilePath = Server.MapPath(physicalTempFilePath);
        if (File.Exists(physicalTempFilePath))
           {
             File.Delete(physicalTempFilePath);
           }
        inputFile.SaveAs(physicalTempFilePath);
      }
      return physicalTempFilePath;
}
Có một thư mục gọi là " CSV " trong thư mục dự án để giữ các tệp csv được tải lên theo thời gian.  
Bước 3: Nhiệm vụ tiếp theo của chúng tôi là tạo một danh sách nhân viên loại người dùng. Đây là đoạn mã để làm điều này:
private void AddEmployeeToList(CsvReader csv, List<User> employeeList)
{
    User _user = new User();
    string value = string.Empty;
    value = csv[0];
    if (!string.IsNullOrEmpty(value))
       {
         _user.EmployeeId = Convert.ToInt32(value);
         value = string.Empty;
       }
    value = csv[1];
    if (!string.IsNullOrEmpty(value))
       {
         _user.LastName = value;
         value = string.Empty;
        }
    value = csv[2];
    if (!string.IsNullOrEmpty(value))
       {
         _user.FirstName = value;
         value = string.Empty;
       }
    value = csv[3];
    if (!string.IsNullOrEmpty(value))
       {
         _user.Email = value;
         value = string.Empty;
       }
     _user.Password = GeneratePassword();
     employeeList.Add(_user);
}
Tôi đã tạo một mật khẩu ngẫu nhiên từ GUID và tôi đã thêm một cột phụ với đối tượng danh sách. Đây là đoạn mã để thực hiện nhiệm vụ này.  
private string GeneratePassword()
{
   string guidResult = string.Empty;
   while (guidResult.Length <= 6)
      {
         // Get the GUID.
         guidResult += Guid.NewGuid().ToString().GetHashCode().ToString("x");
      }
   return guidResult;
}
Bước 4 : Và cuối cùng chúng ta sẽ gán đối tượng danh sách cho UserBLL và chèn vào cơ sở dữ liệu từng cái một. Đây là đoạn mã để làm điều này:
private void InsertNewEmployee(List<User> employeeList)
{
   UserBLL _userBLL = new UserBLL();
   foreach (User item in employeeList)
   {
      _userBLL.CreateNewUser(item);
   }
}

Cách sử dụng dự án:

Bước 1 : Đầu tiên tải xuống dự án và sau khi giải nén mở tệp dự án trong studio trực quan.
Bước 2 : Tạo một cơ sở dữ liệu mới và đặt tên cho nó là CSV CSVTODATABASE, sau đó tạo một bảng giống như hình ảnh được cung cấp bên dưới và lưu nó dưới dạng Đăng người dùng. 
 Hình 2 cho Chèn vào cơ sở dữ liệu từ tệp CSV
Bước 3 : Sau đó làm sạch dự án và xây dựng nó. Sau đó chạy dự án và bạn sẽ có thể làm việc với nó ngay bây giờ. Thay đổi mã theo yêu cầu của bạn.  
Đây là một đầu vào mẫu cho tệp CSV. Thực hiện theo hình ảnh để tạo một cái cho chính mình.
Hình 3 cho Chèn vào cơ sở dữ liệu từ tệp CSV
Ưu điểm:
  • Theo như tôi biết thì không có giới hạn nào trong việc xử lý dữ liệu của Lumenworks như GemBox. Gembox không hỗ trợ chèn dữ liệu hơn 150 hàng cùng một lúc. Lumenworks không có giới hạn như vậy.  
  • Dễ dàng xử lý và sửa đổi dữ liệu trước khi chèn.  
  • Giống như tôi đã thêm một trường bổ sung dưới dạng mật khẩu không có trong tệp csv nhưng tôi cần chèn mật khẩu ngẫu nhiên cho mọi người dùng trong cơ sở dữ liệu với giá trị trường csv tương ứng. Tôi thấy nó dễ dàng hơn để làm điều này. 
Chúc mừng mã hóa.

Phản Hồi Độc Giả

Một số lưu ý khi bình luận

Mọi bình luận sai nội quy sẽ bị xóa mà không cần báo trước (xem nội quy)

Bấm Thông báo cho tôi bên dưới khung bình luận để nhận thông báo khi admin trả lời

Để bình luận một đoạn code, hãy mã hóa code trước nhé