2008-11-13 14 views
6

Ich bin auf der Suche nach Best Practices oder Ideen, wie Sie eine Schnittstelle mit einer DB aus einer .NET-Webanwendung erstellen würden, um Daten aus Excel-Dateien hochladen Sollte ich einen Mechanismus verwenden, der alle erlaubt die zu ladenden Datensätze und kennzeichnet die Fehler oder sollte ich einen Mechanismus verwenden, der den Ladevorgang stoppt, wenn ein Fehler auftritt.Best Practices für das Hochladen von Dateien in die Datenbank

Ich hatte noch nie mit dieser Art von Anforderung zu tun, bevor so jede Hilfe wäre super!

Dank

Antwort

1

Wenn die Datenintegrität in Ihrem DB wichtig ist, nicht erlauben, Daten importiert werden, die Fehler hat oder erfüllt nicht die Anforderungen an die Validierung des DB.

Da dies Excel-Dateien sind, sollte es einfach genug für den Benutzer sein, die Daten in der Excel-Datei zu korrigieren, anstatt zu versuchen, eine andere Schnittstelle zu verwenden, um die Daten zu reparieren. Stellen Sie nur sicher, dass die Fehlermeldungen den Benutzer zu dem Feld führen, in dem das Problem auftritt, und erklären Sie klar, was falsch ist.

+0

Obwohl die Validierung gut ist, stellen Sie sicher, dass Sie im Rohformat speichern. Am Ende machen Sie tausende Male an tausenden Stellen, die Sie nicht erwarten würden, und es ist ein großer Gewinn, die rohe Version als nicht konvertiert zu haben. – aronchick

0

tun Sie die Excel-Dateien in der DB als Blob setzen wollen? Oder möchten Sie die Dateien analysieren und die Datensätze in die db-Dateien einfügen?

Ich nehme an, es ist das letztere.

Als Benutzer möchte ich die Möglichkeit haben zu wissen, was die Fehler sind, damit ich sie beheben und es erneut versuchen kann. Ich denke, wie ich es erneut versuche, hängt davon ab, wie viele Daten ich hochlade.

Ich würde versuchen, eine Hybrid-Lösung zu tun .. wenn es nur ein paar Fehler zeigen einen Bildschirm, um diese Fehler zu korrigieren, so kann der Benutzer schnell weitergehen. Wenn es eine Menge Fehler gibt, sollten Sie es einfach tun und den Benutzer noch einmal versuchen lassen.

Soweit die DB. Entweder haben Sie eine separate Tabelle, in die hochgeladen wird, bis sie geprüft werden und erhalten Sie Ihre "echten" Daten, oder Sie haben eine UploadUniqueId-Spalte, so dass Sie jeden Upload ohne großen Aufwand zurücksetzen können.

löschen Tabellenname wo UploadUniqueId = ‚GUID‘

2

Sie sollten die Daten hochladen und sie dann kennzeichnen, wenn sie die Validierungsprüfungen nicht bestehen. Für die Daten tatsächlich geladen wird, haben Sie ein paar Optionen:

  • Der ADO.Net Bulk-Load API - nutzen Sie den Bulk Load-API in einer Inszenierung Tisch zu legen. Das folgende Snippet zeigt einen Prozess zum Öffnen einer CSV-Datei und programmatisch laden Sie es in eine Staging-Tabelle.

.

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(); 
       } 
      } 
     } 
  • Verwenden Sie BCP oder SSIS zu importieren, entweder direkt aus der Tabelle oder aus einer CSV-Datei.
4

Ich würde versuchen, den folgenden Ansatz, der in der Vergangenheit gut funktioniert hat.

  1. Erlauben Sie dem Benutzer, die Datei hochzuladen, legen Sie sie irgendwo auf der Festplatte.
  2. Binden Sie die Ergebnisse der Datei an ein Gitter (Sie können eine Verbindung zu Excel-Dateien herstellen, indem Sie ODBC/OLE DB mit herkömmlichen Verbindungs-/Befehlsobjekten verwenden).
  3. Wenden Sie die Validierung auf die Zeilen im Grid basierend auf einigen Geschäftsregeln an (Excel-Daten sind normalerweise ziemlich unordentlich).
  4. Erlauben Sie dem Benutzer, Werte im Raster zu aktualisieren und Validierungsprobleme zu korrigieren.
  5. Wenn alle Daten koscher sind und der Benutzer damit zufrieden ist, führen Sie eine Masseneinfügung in einer Transaktion durch.
  6. Wenn etwas "Schlechtes" passiert, Rollback und präsentieren einige Benutzer-Feedback.
Verwandte Themen