2016-08-09 96 views
0

Ich habe einen WEB-API-Dienst entwickelt, der beim Hochladen von Benutzern Daten aus der Excel-Datei liest.Externe Tabelle ist nicht im erwarteten Format OLEDB 12.0 mit Excel 2007

Ich benutze OLEDB, wie folgend:

if (Path.GetExtension(filePath).ToUpper() == ".XLS") 
{ 
    oledbConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties=\"Excel 8.0;HDR=Yes;\""); 
} 
else 
{ 
    oledbConn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1\";"); 
} 
oledbConn.Open(); //Exception thrown at here 
OleDbCommand cmd = new OleDbCommand(); 
OleDbDataAdapter oleda = new OleDbDataAdapter(); 
DataSet ds = new DataSet(); 
cmd.Connection = oledbConn; 
cmd.CommandText = "SELECT DISTINCT(["+mo_field+"]),["+model_field+"],["+content_filed+"] FROM ["+ecn_field+"] WHERE ["+mo_field+"] IS NOT NULL AND ["+active_field+"] ='1'"; 
oleda = new OleDbDataAdapter(cmd); 
oleda.Fill(ds,"NewMO"); 

aber es Ausnahme ausgelöst:

Externe Tabelle ist nicht im erwarteten Format

Mein Server Windows Server 2012 RC2 installiert ist 64 Bit, also habe ich versucht, installieren Microsoft Database Engine 2010 2010 32bit/64bit neu zu verteilen. Und Microsoft Database Engine 2007 32 Bit. Aber es funktioniert immer noch nicht. Ich suchte nach 3 Tagen, und jeder Beitrag sagte, dass die Installation von Microsoft Database Engine den Fehler beheben wird. Dieser Code funktioniert gut mit Office 2010/2013.

Vielen Dank für Ihre Hilfe!

+0

Funktioniert es, wenn Sie auf dem Weg geben, wo es heißt „+ filePath +“? – smoore4

+0

Es funktioniert auch nicht :) –

+0

Nachdem Sie das DataSet (ds) füllen, können Sie versuchen, eine DataTable erstellen und dann verwenden: DataTable dt = ds.Tables [0]; – smoore4

Antwort

1
var ds = new DataSet(); 
var da = new OleDbDataAdapter("SELECT DISTINCT(["+mo_field+"]),["+model_field+"],["+content_filed+"] FROM ["+ecn_field+"] WHERE ["+mo_field+"] IS NOT NULL AND ["+active_field+"] ='1'", 
           "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" + filePath + "';Extended Properties='Excel 12.0;HDR=YES;IMEX=1'"); 
da.Fill(ds,"NewMO"); 

und stellen Sie sicher, dass die Datei wirklich eine Excel-Datei ist, indem Sie sie in Excel öffnen.

aktualisieren

Hier sind einige weitere Verbindungszeichenfolgen von https://www.connectionstrings.com/excel/ versuchen

foreach (var cs in new string[] { 
    "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";Extended Properties='Excel 8.0;HDR=YES';", 
    "OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties='Excel 8.0; HDR = Yes; IMEX = 1';" }) 
    try { using (var con = new System.Data.OleDb.OleDbConnection(cs)) con.Open(); MessageBox.Show(cs + " worked bro!!"); } catch { } 

foreach (var cs in new string[] { 
    "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=" + filePath + ";", 
    "Driver={Microsoft Excel Driver (*.xls)};DriverId=790;Dbq=" + filePath + ";", 
    "Driver={Microsoft Excel Driver (*.xls)};Dbq=" + filePath + ";ReadOnly=0;"}) 
    try { using (var con = new System.Data.Odbc.OdbcConnection(cs)) con.Open(); MessageBox.Show(cs + " worked bro!!"); } catch { } 
+0

Es wurde eine Ausnahme bei 'oledbConn.Open();' ausgelöst. Und der Code funktioniert gut mit Excel 2010/2013, bro –

+0

das ist seltsam, weil es keine 'oledbConn.Open();' in meinem Code:] also ich denke, Sie haben es nicht versucht? – Slai

+0

Ich habe versucht, Ihren Code und immer noch Ausnahme bei 'da.Fill (ds," NewMO ");'. Ich bin so verwirrt :(. –