none
problème lecture Excel RRS feed

  • Question

  • Bonjour,

    je n'arrive pas à lire un fichier Excel intégré dans ma solution. En exécutant le code, il me génère une erreur que je ne comprend pas du tous.

     

    code :

    string connString = ConfigurationManager.ConnectionStrings["xlsx"].ConnectionString;
    
                OleDbConnection oledbConn = new OleDbConnection(connString);
    
                try
                {
                    // ouverture connection
                    oledbConn.Open();
                    // Creation OleDbCommand
                    OleDbCommand cmd = new OleDbCommand("SELECT * FROM [EndUsers$]", oledbConn);
                    // Create new OleDbDataAdapter
                    OleDbDataAdapter oleda = new OleDbDataAdapter();
                    oleda.SelectCommand = cmd;
                    DataSet ds = new DataSet();
                    oleda.Fill(ds, "Offre");
                    string c = ds.Tables.Count.ToString();
                    
                }
                catch(Exception ex)
                {
                }

    voila le Web.conf :

    <connectionStrings>
        <add name="xlsx" connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=res://*/Metier/Fichier/ExempleFichierEntrée5Etoiles.xlsx;Extended Properties=Excel 12.0"/>
    </connectionStrings>

    et voila l'erreur générer :

    ystem.Data.OleDb.OleDbException (0x80004005): Impossible de créer un fichier. à System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection) à System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject) à System.Data.ProviderBase.DbConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions) à System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup, DbConnectionOptions userOptions) à System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) à System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) à System.Data.ProviderBase.DbConnectionInternal.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) à System.Data.OleDb.OleDbConnection.Open() à _5_Stars._Default.Page_Load(Object sender, EventArgs e) dans D:\utilisateurs\abenjema\documents\visual studio 2010\Projects\5 Stars\5 Stars\5Stars.aspx.cs:ligne 26

    l'exception se declanche directement dès la connexion.

    est ce qu'une personne pourrais m'expliquer l'origine d'une problème et comment le résoudre??

    merci d'avance :)

    mardi 22 octobre 2013 14:14

Réponses

  • Bonjour,

    Il me semble que le driver OleDB ne supporte pas des chemin dans le "Data Source" qui font référence à votre assembly. Vous devez extraire votre fichier Excel qui se trouve dans votre assembly (dans un répertoire temporaire par exemple) et pointer le "Data Source" de la chaîne de connexion sur ce fichier temporaire.

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance - P.O.S Informatique
    Blog : http://gilles.tourreau.fr - Suivez-moi sur Twitter
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCSA : SQL Server 2012
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 / TFS 2010 / Windows Azure

    • Marqué comme réponse ahmedmahdi mercredi 23 octobre 2013 12:10
    mercredi 23 octobre 2013 06:55
    Modérateur

Toutes les réponses

  • Bonjour,

    Il me semble que le driver OleDB ne supporte pas des chemin dans le "Data Source" qui font référence à votre assembly. Vous devez extraire votre fichier Excel qui se trouve dans votre assembly (dans un répertoire temporaire par exemple) et pointer le "Data Source" de la chaîne de connexion sur ce fichier temporaire.

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance - P.O.S Informatique
    Blog : http://gilles.tourreau.fr - Suivez-moi sur Twitter
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCSA : SQL Server 2012
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 / TFS 2010 / Windows Azure

    • Marqué comme réponse ahmedmahdi mercredi 23 octobre 2013 12:10
    mercredi 23 octobre 2013 06:55
    Modérateur
  • merci de ta réponse,

    j'ai cherché sur le net pour pouvoir accéder à mon fichier de mon assembly pour le copier dans un autre répertoire en C#, mais je ne trouve pas.

    mercredi 23 octobre 2013 08:03
  • j'ai trouvé une solution pour copié le fichier de la solution.

    En effet c'est possible avec

    Server.MapPath(String cheminRelatif)

    ma solution devient :

    File.Copy(Server.MapPath("~\\Metier\\Fichier\\ExempleFichierEntrée5Etoiles.xlsx"),
                    Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\FichierExempleFichierEntrée5Etoiles.xlsx");

    j'ai une question par rapport au fichier destinataire.

    Comment on renseigne "Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)"dans le "Data Source" du "Web.config"


    • Modifié ahmedmahdi mercredi 23 octobre 2013 09:30
    mercredi 23 octobre 2013 09:29
  • j'ai fais une petite manipulation pour changer le "Data Source" du "Web.config" et ça marche.

    voivi le code en C# :

                File.Copy(Server.MapPath("~\\Metier\\Fichier\\ExempleFichierEntrée5Etoiles.xlsx"),
                    Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\FichierExempleFichierEntrée5Etoiles.xlsx");
    
                string connString = ConfigurationManager.ConnectionStrings["xlsx"].ConnectionString.Replace("SOURCEEXCEL", Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\FichierExempleFichierEntrée5Etoiles.xlsx");
    
                OleDbConnection oledbConn = new OleDbConnection(connString);

    merci beaucoup pour votre aide :)
    mercredi 23 octobre 2013 12:10