2017-06-21 1 views
1

Ich weiß, dass diese Frage hat Dutzende von Antworten und Beiträge, aber nichts funktioniert für mich.'Microsoft.ace.oledb.12.0' nicht alle Zeilen von .xlsx Datei auf dem Server (IIS7)

Wir haben meine MVC4-Anwendung und ich habe es auf IIS7 auf meinem Server und einem weiteren Computer bereitgestellt, wo wir Visual Studio nicht installiert haben.

Wir machen Import/Export Daten von/zu Excel für die Masseneingabe.

Wir haben Daten um 20000 in einem Blatt mit .xlsx-Format von Office 2007 (Datei ist als Excel-Arbeitsmappe speichern).

Wenn ich jetzt Daten mit folgendem Code lese, lese ich nur Daten zwischen 4000 und 5000 Zeilen.

Diese ganzen Code unten fein in meinem lokalen Rechner zu arbeiten, wo ich Code tun und lesen Sie alle 20.000 Zeilen Daten aus „Excel 97-2003-Arbeitsmappe mit .xls“ aber nicht mit .xlsx mit „Excel-Arbeitsmappe arbeiten ".

private void FillDataSet(HttpPostedFileBase file, DataSet ds) 
{ 
    using (
    var con = 
     new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" File Path";Extended Properties=Excel 12.0")) 
    { 
     con.Open(); 
     var dtSchema = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); 
     var strSheetName = ""; 
     strSheetName = dtSchema.Rows[0]["TABLE_NAME"].ToString();   
     var cmd = new OleDbCommand(); 
    var da = new OleDbDataAdapter(); 
    cmd.Connection = con; 
    cmd.CommandType = CommandType.Text; 
    cmd.CommandText = "SELECT * FROM [" + strSheetName + "]"; 
    da = new OleDbDataAdapter(cmd); 
    da.Fill(ds);   
    } 
} 

Ich habe die folgenden Schritte und Lösungen durchgegangen, aber es funktioniert nicht für mich.

-Installieren von Microsoft Access-Datenbankmodul 2010 Redistributable.

-Installation 2007 Office System Driver: Datenkonnektivitätskomponenten

wir verwirren, warum es auf meinem lokalen Rechner funktioniert und nicht auf dem Server arbeiten.

Bitte geben Sie eine Idee oder Lösung für dieses Problem ..

Was ich versucht habe: -Vom Lösung Explorer Eigenschaften der rechten Maustaste Ihr Projekt dann auf OK. - Klicken Sie auf die Registerkarte Erstellen - Change Platform Ziel von: Any CPU to x86 | Jede CPU zu x64 -Erstellen Sie Ihre Lösung -Änderte auch Änderungen an IIS in Advance-Einstellung mit 32-Bit-Anwendung als True/False aktivieren.

Antwort

1

einige Zeit, während die Daten aus Excel lesen Sie alle Daten in Text Format

OLD Connection String

"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" File Path";Extended Properties=Excel 12.0" 

Aktualisiert Verbindungszeichenfolge

konvertieren
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" File Path";Extended Properties=Excel 12.0;HDR=YES;IMEX=1';" 

Dadurch werden alle Daten in das Textformat konvertiert und alle Daten werden angezeigt.

AKTUALISIERT CODE

private void FillDataSet(HttpPostedFileBase file, DataSet ds) 
{ 
    using (
    var con = 
     new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" File Path";Extended Properties=Excel 12.0;HDR=YES;IMEX=1';")) 
    { 
     con.Open(); 
     var dtSchema = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); 
     var strSheetName = ""; 
     strSheetName = dtSchema.Rows[0]["TABLE_NAME"].ToString();   
     var cmd = new OleDbCommand(); 
    var da = new OleDbDataAdapter(); 
    cmd.Connection = con; 
    cmd.CommandType = CommandType.Text; 
    cmd.CommandText = "SELECT * FROM [" + strSheetName + "]"; 
    da = new OleDbDataAdapter(cmd); 
    da.Fill(ds);   
    } 
} 
+0

Danke Tanay für Update .. aber das ist auch nicht mein Problem gelöst. Ich habe die Verbindung durch diesen Link gegeben, aber auf jeden Fall ist es nicht gelesen ganze 20000 Datensätze Es ist nur lesen 4000-5000 Datensätze nur mit .xlsx Format https://www.connectionstrings.com/ace-oledb -12-0/ –

+0

Das ist nicht richtig. IMEX = 1 bedeutet, dass der Anbieter gemischte Spalten als Text behandelt und nicht alles als Text behandelt. Leider scannt der Provider immer noch die ersten 8 Zeilen und entscheidet über die Datentypen in den Spalten. Ohne IMEX = 1 würde Null für alles, was nicht ausgewertet wurde, den Datentyp zurückgeben, auf dem es sich absetzt. Das ist kein Problem, wenn sie sie trotzdem als Text auswertet. Wenn sie aber denkt, dass es Zahlen sind, erhalten Sie Nullen in den Textzellen. In diesem Fall gibt IMEX = 1 Text für Spalten zurück, in denen in den ersten 8 Zellen der Spalte gemischte Datentypen vorhanden sind. –

0

Versuchen Sie dies. Ich hatte auch einige Probleme.

+1

Der Jet-Provider ist veraltet und sollte nie mehr benutzt werden. –

Verwandte Themen