Question

J'essaie de faire ce qui suit:

  1. L'utilisateur accède à la page Web et télécharge un fichier XLS
  2. utilisez ADO .NET pour ouvrir un fichier XLS à l'aide d'une connexion de moteur JET vers un fichier téléchargé localement sur le serveur Web

Tout fonctionne correctement localement (ma machine en tant que client et serveur Web) - et travaille en fait sur le serveur Web du client avec des clients distants, mais ne fonctionne pas lorsque vous essayez de tester en interne à l'aide d'un client distant.

L'erreur que je reçois est la suivante:

TIME:       [10/1/2008 11:15:28 AM]
SEVERITY:   EXCEPTION
PROGRAM:    Microsoft JET Database Engine
EXCEPTION:  Unspecified error
STACK TRACE:       at System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection)
   at System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject)
   at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup)
   at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
   at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
   at System.Data.OleDb.OleDbConnection.Open()

Le code générant l'erreur est:

OleDbConnection l_DbConnection;
        OleDbDataAdapter l_DbCommand;
        DataSet l_dataSet = new DataSet();

        l_DbConnection = new OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0; data source=\"" + l_importFileName + "\";Extended Properties=Excel 8.0;");
        l_DbCommand = new OleDbDataAdapter("select * from [Sheet1$]", l_DbConnection);

        //try using provider to read file
        try { l_DbConnection.Open(); }

L'appel à " Ouvrir " soulève l'exception ci-dessus.

Le site utilise l'emprunt d'identité et tous les appels sont effectués lorsque l'utilisateur est connecté au client. Ce que j’ai fait jusqu’à présent pour que cela fonctionne:

Suivez les étapes décrites ici http://support.microsoft.com/kb/251254/ et des autorisations attribuées au répertoire de variables d'environnement TMP / TEMP à l'utilisateur que j'utilise pour tester (également des autorisations attribuées à ASPNET, puis à "Tout le monde" en tant que couverture, ces autorisations sont-elles liées? "test).

Assurez-vous que le fichier est en cours de téléchargement et que le fichier XLS lui-même a hérité des autorisations de répertoire qui permettent à l'utilisateur un accès complet au fichier. J'ai également donné à ce répertoire les autorisations pour "Tout le monde". juste au cas où - cela n'a pas non plus aidé.

Je n'ai pas eu à modifier de variables d'environnement et, par conséquent, je n'ai pas redémarré après avoir apporté ces modifications - mais je ne devrais pas être obligé de prendre en compte les autorisations de dossier / fichier Windows.

À ce stade, je suis totalement désemparé

Était-ce utile?

La solution

Ok, l'a compris -

s'avère que même lorsque IIS utilise l'emprunt d'identité et que les variables d'environnement TMP / TEMP sont définies sur C: \ WINDOWS \ Temp, le processus ASP.NET est toujours en cours d'exécution sous le compte ASPNET et chaque utilisateur individuel doit disposer d'autorisations sur les documents et les paramètres. \ ASPNET \ Local Settings \ Dossier Temp

L'inverse serait probablement de créer un nouveau pool d'applications et de le faire fonctionner en tant qu'utilisateur avec des autorisations sur le bon dossier plutôt que sur ASPNET

Autres conseils

Allez dans le répertoire \ Documents and Settings \ " nom_ordinateur "\ ASPNET \ Local Settings \ Temp et donnez les droits de lecture, d’écriture à l’utilisateur " EveryOne " Ensuite, cela fonctionnera bien. De plus, vous devez définir " " dans le fichier web.config

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top