OLEDBConnection.Open () generează "Eroare nespecificată"

Am o aplicație care încarcă un fișier Excel .xls în sistemul de fișiere, deschide fișierul cu un obiect oledbconnection folosind metoda .open() pe instanța obiectului și apoi stochează datele într-o bază de date. Încărcarea și scrierea fișierului în sistemul de fișiere funcționează bine, dar apare o eroare la încercarea de a deschide fișierul numai pe serverul nostru de producție. Aplicația funcționează bine pe alte două servere (servere de dezvoltare și testare).

Următorul cod generează o "eroare nespecificată" în mesajul Exception.Message.

Citat:

        System.Data.OleDb.OleDbConnection x = new System.Data.OleDb.OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + location + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'");
        try
        {
            x.Open();
        }
        catch (Exception exp)
        {
            string errorEmailBody = " OpenExcelSpreadSheet() in Utilities.cs.  " + exp.Message;
            Utilities.SendErrorEmail(errorEmailBody);
        }

: End Quote

Setările serverului c: \\ temp și c: \ Documents and Settings \\ aspnet \ local settings \ temp ambele oferă control complet aspnet.

Cred că există o problemă de permisiuni, dar nu pare să găsească vreo diferență între permisiunile din dosarele notate și directorul/directorul în care este încărcat fișierul Excel. Aceeași locație este folosită pentru salvarea fișierului și deschiderea acestuia, iar metodele funcționează pe stația mea de lucru și pe două servere web. Serverele Windows 2000 SP4.

0

6 răspunsuri

Orice în excepția interioară? Este o aplicație pe 64 de biți? Furnizorii OLEDB nu funcționează pe 64 de biți. Trebuie să aveți aplicația țintă x86. S-a găsit acest lucru când a apărut o eroare în încercarea de a deschide DB acces pe calculatorul meu pe 64 de biți.

0
adăugat

Da. Și eu am făcut asta. Am extras IMEX = 1, am extras proprietăți extinse etc. Am reușit să o rup pe serverele dev și test. :) Am pus acelea inapoi intr-un singur moment pana cand a fost fixat pe dev si test din nou, dar inca nu lucreaza pe prod.

0
adăugat

Dacă folosiți confidențialitatea, va trebui să acordați permisiunea utilizatorului de impersonalizare în loc de/în plus față de utilizatorul aspnet.

0
adăugat

Am apărut acea eroare asupra chestiunii permisiunilor, dar se pare că ai acoperit-o. De asemenea, am văzut-o cu unul dintre steagurile din șirul de conectare - s-ar putea să jucați puțin.

0
adăugat
Într-adevăr? Acest răspuns a rezolvat problema dvs.?
adăugat autor juan, sursa

Încercați să împachetați locația în ghilimele simple

System.Data.OleDb.OleDbConnection x = new System.Data.OleDb.OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" + location + "';Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'");
0
adăugat

În timp ce problema permisiunilor poate fi mai frecventă, puteți întâlni această eroare din limitele de conectare ale sistemului de fișiere Windows/Access Jet DB Engine, cred că 64/255. Dacă rupeți conexiunile concurente de citire/scriere 255 sau limita de conectare 64 (?) Pentru fiecare proces, puteți obține această eroare exact aceeași. Cel puțin am dat peste asta într-o aplicație în care conexiunile au fost create în mod continuu și nu au fost închise corect. Un simplu Conn.close (); a intrat și viața a fost bună. Îmi imaginez că Excel ar putea avea probleme similare.

0
adăugat
Ca o notă laterală: Conn.Dispose() aparent nu închide conexiunea.
adăugat autor Residuum, sursa