2008-11-13 14 views
6

Szukam najlepszych praktyk i pomysłów na temat tworzenia interfejsu z bazą danych z aplikacji internetowej .NET do przesyłania danych z plików Excel. Czy powinienem używać mechanizmu, który pozwala wszystkim rekordy do załadowania i oznaczenia błędów lub powinienem użyć mechanizmu, który zatrzymuje ładunek w przypadku wystąpienia błędu.Najlepsze metody przesyłania plików do bazy danych

Nigdy nie miałem do czynienia z tego rodzaju wymogiem, więc każda pomoc byłaby super!

Dzięki

Odpowiedz

1

Jeśli integralność danych w DB jest ważna, nie pozwalają dane mają być przywiezione, że zawiera błędy lub nie spełnia wymogów poprawności swojego DB.

Ponieważ są to pliki Excel, powinno być łatwe dla użytkownika, aby poprawić dane w pliku Excel, zamiast próbować użyć innego interfejsu do naprawy danych. Po prostu upewnij się, że komunikaty o błędach kierują użytkownika do tego, w którym polu jest problem i wyraźnie wyjaśniają, co jest nie tak.

+0

Chociaż sprawdzanie poprawności jest dobre, upewnij się, że przechowujesz je w tak surowym formacie, jak to możliwe. Konwersji dokonuje się tysiąc razy w tysiącu miejsc, których się nie spodziewałeś, a posiadanie surowej wersji w niezmienionym stanie, jak to tylko możliwe, jest wielką wygraną. – aronchick

0

chcesz umieścić pliki Excel w DB jako blob? czy chcesz sparsować pliki i umieścić rekordy w plikach w db?

Zakładam, że to drugie.

Jako użytkownik chciałbym wiedzieć, jakie są błędy, więc mogę je naprawić i spróbować ponownie. Myślę, że to, jak spróbuję, zależy od ilości danych, które przesyłam.

Spróbowałbym zrobić rozwiązanie hybrydowe. Jeśli pojawi się tylko kilka błędów, pojawi się ekran umożliwiający skorygowanie tych błędów, aby użytkownik mógł szybko przejść. Jeśli jest mnóstwo błędów, powinieneś po prostu to zrobić i spróbować ponownie.

Jeśli chodzi o DB. Mają oddzielną tabelę, do której przesyłają pliki, dopóki nie zostaną sprawdzone i nie otrzymają "prawdziwych" danych lub mają kolumnę UploadUniqueId, aby można było przywrócić dowolne przesyłanie bez większego zamieszania.

kasowania tableName gdzie UploadUniqueId = „GUID”

2

Należy przesłać dane, a następnie zgłosić je, jeśli nie przejdą sprawdzania poprawności. Dla rzeczywiście ładowania danych, masz kilka opcji:

  • ADO.Net luzem obciążenia API - Użycie obciążenia API luzem, aby umieścić go w inscenizacji tabeli. Poniższy fragment przedstawia proces , aby otworzyć plik CSV i programowo załadować go do tabeli pomostowej .

.

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(); 
       } 
      } 
     } 
  • Zastosowanie BCP lub SSIS go importować albo bezpośrednio z arkusza lub z pliku CSV.
4

Chciałbym spróbować następujące podejście, które działa dobrze w przeszłości.

  1. Pozwól użytkownikowi przesłać plik, umieść go gdzieś na dysku.
  2. Powiąż wyniki pliku z niektórymi siatkami (możesz połączyć się z plikami Excel za pomocą ODBC/OLE DB przy użyciu tradycyjnych obiektów Connection/Command).
  3. Zastosuj sprawdzanie poprawności do wierszy w siatce na podstawie niektórych zestaw reguł biznesowych (dane excel są zwykle dość brudne).
  4. Umożliwia użytkownikowi aktualizację wartości w siatce i poprawienie problemów z weryfikacją.
  5. Gdy wszystkie dane są koszerne, a użytkownik jest z niego zadowolony, należy wprowadzić wkładkę zbiorczą w transakcji.
  6. Jeśli coś "złego" stanie się wycofywane i przedstawi pewne opinie użytkowników.
Powiązane problemy