2008-11-13 30 views
6

Tôi đang tìm bất kỳ phương pháp hoặc ý tưởng hay nhất nào về cách bạn tạo giao diện với DB từ ứng dụng web .NET để tải dữ liệu từ tệp Excel Tôi có nên sử dụng cơ chế cho phép tất cả các bản ghi được tải và gắn cờ các lỗi hoặc tôi nên sử dụng một cơ chế dừng tải khi xảy ra lỗi.Thực tiễn tốt nhất để tải tệp lên cơ sở dữ liệu

Tôi chưa bao giờ phải đối phó với loại yêu cầu này trước đây nên mọi trợ giúp sẽ là siêu!

Cảm ơn

Trả lời

1

Nếu tính toàn vẹn dữ liệu trong DB của bạn là rất quan trọng, không cho phép dữ liệu được nhập khẩu có lỗi hoặc không đáp ứng được yêu cầu xác nhận của DB của bạn.

Vì đây là các tệp Excel nên phải dễ dàng cho người dùng sửa dữ liệu trong tệp Excel, thay vì cố gắng sử dụng giao diện khác để sửa dữ liệu. Chỉ cần đảm bảo thông báo lỗi hướng người dùng đến trường nào là vấn đề và giải thích rõ ràng những gì là sai.

+0

Mặc dù xác thực là tốt, hãy đảm bảo bạn đang lưu trữ ở định dạng thô nhất có thể. Bạn sẽ thực hiện chuyển đổi hàng nghìn lần trong một nghìn địa điểm mà bạn không mong đợi và có phiên bản thô ở trạng thái không được chuyển đổi nhất có thể là một chiến thắng lớn. – aronchick

0

bạn có muốn đặt các tệp excel trong DB dưới dạng blob không? hoặc bạn có muốn phân tích các tệp và đặt các bản ghi trong các tệp vào db không?

Tôi giả định đây là thứ hai.

Là người dùng tôi muốn có tùy chọn để biết lỗi là gì để tôi có thể khắc phục và thử lại. Tôi nghĩ cách thử lại tùy thuộc vào lượng dữ liệu tôi đang tải lên.

Tôi sẽ cố gắng thực hiện giải pháp lai .. nếu chỉ có một vài lỗi hiển thị màn hình để sửa các lỗi đó để người dùng có thể di chuyển nhanh chóng. Nếu có một tấn lỗi, bạn chỉ cần có thể nó và có người dùng thử lại tất cả.

Theo như DB. Hoặc có một bảng riêng biệt tải lên đi vào cho đến khi chúng được kiểm tra và nhận được với dữ liệu "thực" của bạn hoặc có cột UploadUniqueId để bạn có thể khôi phục mọi video tải lên mà không gặp nhiều phiền toái.

xóa tableName nơi UploadUniqueId = 'GUID'

2

Bạn nên tải lên dữ liệu và sau đó gắn cờ nếu dữ liệu không kiểm tra xác thực. Đối với thực tải dữ liệu, bạn có một vài lựa chọn:

  • Các ADO.Net số lượng lớn tải API - sử dụng API tải số lượng lớn để đặt nó trong một dàn bảng. Đoạn mã dưới đây cho thấy quy trình để mở tệp .CSV và lập trình tải nó vào bảng phân đoạn .

.

public void Load() { 
     bool OK = File.Exists(_filename); 
     if (OK) { 
      string sql = String.Format("Select * from {0}", FileName); 
      OleDbConnection csv = new OleDbConnection(); 
      OleDbCommand cmd = new OleDbCommand(sql, csv); 
      OleDbDataReader rs = null; 
      SqlConnection db = null; 
      SqlCommand clear = null; 

      SqlBulkCopy bulk_load = null; 
      try { 
        // Note two connections: one from the csv file 
        // and one to the database; 
        csv = new OleDbConnection(); 
        csv.ConnectionString = ConnectionString; 
        csv.Open(); 
        cmd = new OleDbCommand(sql, csv); 
        rs = cmd.ExecuteReader(); 

        // Dung out the staging table 
        db = // [Create A DB conneciton Here] 
        clear = new SqlCommand("Truncate table Staging", db); // Left to the reader 
        clear.ExecuteNonQuery(); 

        // Import into the staging table 
        bulk_load = new SqlBulkCopy(db); 
        bulk_load.DestinationTableName = Destination; // Actually an instance var 
        bulk_load.WriteToServer(rs); 
       } catch (Exception ee) { 
        string summary = ee.Message; 
        string detail = ee.StackTrace; 
        //Notify(DisplayType.error, summary, detail); 
       } finally { 
        if (rs != null) rs.Close(); 
        if (csv != null) csv.Close(); 
        if (bulk_load != null) bulk_load.Close(); 
       } 
      } 
     } 
  • Sử dụng BCP hoặc SSIS để nhập nó, hoặc là trực tiếp từ bảng tính hoặc từ tệp .CSV.
4

Tôi sẽ thử phương pháp sau đây đã hoạt động tốt trong quá khứ.

  1. Cho phép người dùng tải lên tệp, đặt tệp đó ở đâu đó trên đĩa.
  2. Liên kết kết quả của tệp với một số lưới (bạn có thể kết nối với tệp Excel bằng ODBC/OLE DB bằng cách sử dụng các đối tượng kết nối/lệnh truyền thống).
  3. Áp dụng xác thực cho các hàng trong lưới dựa trên một số quy tắc kinh doanh (dữ liệu excel thường khá bẩn).
  4. Cho phép người dùng cập nhật các giá trị trong lưới và các vấn đề xác thực chính xác.
  5. Khi tất cả dữ liệu được kosher và người dùng hài lòng với nó thực hiện chèn hàng loạt trong giao dịch.
  6. Nếu bất kỳ điều gì "xấu" xảy ra rollback và hiển thị một số phản hồi của người dùng.
Các vấn đề liên quan