IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Méthode Workbooks.Open() : propriété connectionString non initialisée


Sujet :

ASP.NET

  1. #1
    Membre habitué
    Homme Profil pro
    Alternant
    Inscrit en
    Décembre 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Alternant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 10
    Par défaut Méthode Workbooks.Open() : propriété connectionString non initialisée
    Bonjour,

    Je suis confronté aujourd'hui à un problème lors de l'ouverture d'une connexion avec la méthode Open().

    En effet, j'ai un message d'erreur disant que la propriété connectionString n'est pas initialisée.

    Je n'ai pas trouvé la solution à mon problème, et les problèmes similaires que j'ai cherché sur ce forum portent sur d'autres fonctions.

    Ce que je souhaite faire dans mon code : au moment du clic sur le bouton btnEnvoyer, j'importe le contenu de mon fichier Excel dans une table SQL Server.

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    using System;
    using System.ComponentModel;
    using System.Web.UI.WebControls.WebParts;
    using System.Web;
    using System.IO;
    using System.Data;
    using System.Data.OleDb;
    using System.Data.SqlClient;
    using System.Configuration;
     
    namespace MySolution.MyFirstWebPart
    {
        [ToolboxItemAttribute(false)]
        public partial class MyFirstWebPart : WebPart
        {    
            public MyFirstWebPart()
            {
            }
     
            protected override void OnInit(EventArgs e)
            {
                base.OnInit(e);
                InitializeControl();
            }
     
            protected void Page_Load(object sender, EventArgs e)
            {
            }
     
            protected void btn1_Click(object sender, EventArgs e)
            {
                lbl1.Text = txtBox1.Text;
                txtBox1.Text = "";
            }
     
            protected void btnEnvoyer_Click(object sender, EventArgs e)
            {
                string excelPath = Path.Combine(HttpRuntime.AppDomainAppPath, "Files/");
                FileUpload1.SaveAs(excelPath);
     
                string conString = string.Empty;
                string extension = Path.GetExtension(FileUpload1.FileName);
                switch (extension)
                {
                    case ".xls": //Excel 97-03
                        conString = ConfigurationManager.ConnectionStrings["Excel03ConString"].ConnectionString;
                        break;
                    case ".xlsx": //Excel 07 or higher
                        conString = ConfigurationManager.ConnectionStrings["Excel07+ConString"].ConnectionString;
                        break;
                }          
     
                conString = string.Format(conString, excelPath);
                using (OleDbConnection excel_con = new OleDbConnection(conString))
                {
                    excel_con.Open(); // Le problème est ici
                    string sheet1 = excel_con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null).Rows[0]["TABLE_NAME"].ToString();
                    DataTable dtExcelData = new DataTable();
     
                    //[OPTIONAL]: It is recommended as otherwise the data will be considered as String by default.
                    dtExcelData.Columns.AddRange(new DataColumn[3] { new DataColumn("CustomerId", typeof(int)),
                    new DataColumn("Name", typeof(string)),
                    new DataColumn("Country",typeof(string)) });
     
                    using (OleDbDataAdapter oda = new OleDbDataAdapter("SELECT * FROM [" + sheet1 + "]", excel_con))
                    {
                        oda.Fill(dtExcelData);
                    }
                    excel_con.Close();
     
                    string consString = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
                    using (SqlConnection con = new SqlConnection(consString))
                    {
                        using (SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(con))
                        {
                            //Set the database table name
                            sqlBulkCopy.DestinationTableName = "dbo.Customers";
     
                            //[OPTIONAL]: Map the Excel columns with that of the database table
                            sqlBulkCopy.ColumnMappings.Add("CustomerId", "CustomerId");
                            sqlBulkCopy.ColumnMappings.Add("Name", "Name");
                            sqlBulkCopy.ColumnMappings.Add("Country", "Country");
                            con.Open();
                            sqlBulkCopy.WriteToServer(dtExcelData);
                            con.Close();
                        }
                    }
                }
            }
        }
    }
    Je continue mes recherches dans l'attente de vos réponses.
    Merci.

    Strix

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    777
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 777
    Par défaut
    Peux tu vérifier que la variable conString est bien remplie...?

    Est-ce normal le + dans la clé : Excel07+ConString

    A+

  3. #3
    Membre habitué
    Homme Profil pro
    Alternant
    Inscrit en
    Décembre 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Alternant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 10
    Par défaut
    Bonjour Dokho,

    Apparemment, la variable conString n'est pas remplie, mais je ne vois pas pourquoi.

    Pour le + dans la clé, je n'ai pas trop regardé encore, car j'essaye d'importer un fichier .xls pour le moment.

    Cordialement

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    777
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 777
    Par défaut
    Citation Envoyé par -Strix- Voir le message
    Bonjour Dokho,

    Apparemment, la variable conString n'est pas remplie, mais je ne vois pas pourquoi.

    Pour le + dans la clé, je n'ai pas trop regardé encore, car j'essaye d'importer un fichier .xls pour le moment.

    Cordialement
    Si la variable n'est pas remplie c'est que ta comparaison dans ton switch est mauvaise. Tu devrais faire "extension.ToLower()" pour être certain...
    Tu pourrais même te passer de ton switch et mettre directement le nom de l'extension comme clé dans ton web.config...

  5. #5
    Membre habitué
    Homme Profil pro
    Alternant
    Inscrit en
    Décembre 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Alternant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 10
    Par défaut
    La variable extension n'est pas remplie non plus. Je commence à ne plus rien comprendre

    Par contre, je ne trouve pas le fichier web.config dans mon projet (SharePoint WebPart).

    Edit 1 : j'ai le fichier web.config avec les clés inscrites dedans, mais j'ai toujours le soucis des variables vides. Le code en tant que Web Application fonctionne bien, mais pas en tant que SharePoint WebPart.

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    777
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 777
    Par défaut
    Citation Envoyé par -Strix- Voir le message
    La variable extension n'est pas remplie non plus. Je commence à ne plus rien comprendre

    Par contre, je ne trouve pas le fichier web.config dans mon projet (SharePoint WebPart).

    Edit 1 : j'ai le fichier web.config avec les clés inscrites dedans, mais j'ai toujours le soucis des variables vides. Le code en tant que Web Application fonctionne bien, mais pas en tant que SharePoint WebPart.
    C'est normal car tu n'as pas mis de nom de fichier lors de la sauvegarde...(dans le saveas...)

  7. #7
    Membre habitué
    Homme Profil pro
    Alternant
    Inscrit en
    Décembre 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Alternant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 10
    Par défaut
    Citation Envoyé par Dokho1000 Voir le message
    C'est normal car tu n'as pas mis de nom de fichier lors de la sauvegarde...(dans le saveas...)
    Je ne comprends pas ce que tu veux dire. Il faudrait que je remplace ce SaveAs ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    string excelPath = Path.Combine(HttpRuntime.AppDomainAppPath, "Files/");
                FileUpload1.SaveAs(excelPath);
    Ou que je rajoute un SaveAs après ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Path.GetExtension(FileUpload1.FileName);

  8. #8
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    777
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 777
    Par défaut
    Citation Envoyé par -Strix- Voir le message
    Je ne comprends pas ce que tu veux dire. Il faudrait que je remplace ce SaveAs ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    string excelPath = Path.Combine(HttpRuntime.AppDomainAppPath, "Files/");
                FileUpload1.SaveAs(excelPath);
    Ou que je rajoute un SaveAs après ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Path.GetExtension(FileUpload1.FileName);
    Acutellement lorsque tu sauves le fichier tu passes à la méthode saveas le path "c:\blabla\Files". Pour que cela fonctionne tu dois aussi mettre le nom du fichier souhaiter cad "c:\blabla\Files\MonFichier.xls"

    Ton code devrais être donc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     string excelPath = Path.Combine(HttpRuntime.AppDomainAppPath, "Files/MonFichier.xls");
                FileUpload1.SaveAs(excelPath);
    A+

  9. #9
    Membre habitué
    Homme Profil pro
    Alternant
    Inscrit en
    Décembre 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Alternant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 10
    Par défaut
    Merci pour tes réponses.

    J'ai donc changé le code comme tu me l'as montré et le fichier s'enregistre correctement maintenant.

    Je tombe maintenant sur un problème dans le switch.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    conString = ConfigurationManager.ConnectionStrings["Excel03ConString"].ConnectionString;
    Cela me dit : "La référence d'objet n'est pas définie à une instance d'objet".

    J'ai donc remplacé le code par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    conString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR=YES'";
    Et là j'ai l'erreur suivante : "Le fournisseur Microsoft.Jet.OLEDB.4.0 n'est pas inscrit sur l'ordinateur local".

  10. #10
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Salut,

    première erreur : tu n'as pas de ConnectionString portant le nom Excel03ConString dans ton fichier de config.
    Après je sais pas comment ça fonctionne avec Sharepoint (tu m'as bien eu ! je pensais être sur un sujet ASP.NET )

    deuxième erreur : essaierais-tu de compiler en 64bits (ce provider n'existe qu'en 32 bits) ? En tout cas c'est le cas le plus fréquemment remonté.

  11. #11
    Membre habitué
    Homme Profil pro
    Alternant
    Inscrit en
    Décembre 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Alternant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 10
    Par défaut
    Bonjour jopopmk,

    Effectivement, je suis aussi tombé sur cette histoire de provider, j'ai essayé Any CPU/32 Bits/64 Bits mais cela n'a rien changé.

    Pour la ConnectionString, je ne sais pas du tout où la mettre dans le fichier web.config, donc je l'ai marquée en dur dans le code histoire d'essayer.

    Cordialement

  12. #12
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Re,

    pour le fichier de config tu as un exemple sur cette fiche MSDN.

    Pour l'archi as-tu fais la modification dans les propriétés du projet > Générer > Plateforme cible > x86 ?
    Modifier l'archi dans les ddl de la barre d'action n'a pas nécessairement le même effet.
    Sinon il faudra soit creuser soit changer de provider ...

  13. #13
    Membre habitué
    Homme Profil pro
    Alternant
    Inscrit en
    Décembre 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Alternant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 10
    Par défaut
    Voilà le joli message que j'ai lorsque je debug la solution en x86 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Détails de l'erreur :
    [UnsafeControlException: Impossible d'afficher un composant WebPart ou ce contrôle de formulaire Web sur cette page. Le type MySolution.MyFirstWebPart.MyFirstWebPart, MySolution, Version=1.0.0.0, Culture=neutral, PublicKeyToken=486fa51a768fd206 est introuvable ou n’est pas inscrit comme fiable.]
      à Microsoft.SharePoint.ApplicationRuntime.SafeControls.GetTypeFromGuid(Guid guid, Guid solutionId, String assemblyFullName, String typeFullName, Boolean throwIfNotFound) 
      à Microsoft.SharePoint.WebPartPages.SPWebPartManager.CreateWebPartsFromRowSetData(Boolean onlyInitializeClosedWebParts)
    Edit 1 : Je viens de voir dans SQL Server Management Studio que je n'ai que le provider x64 ACE.12.0 et pas celui x86 JET.4.0, je vais installer ça

    Edit 2 : Ça fonctionne ! Du moins avec un fichier .xlsx ! Quand j'importe un fichier .xls, j'ai le message suivant "Le fournisseur "Microsoft.Jet.OLEDB.4.0" n'est pas inscrit sur l'ordinateur local". Peut-être qu'en compilant en x86 le message d'erreur sera réglé. En tout cas, je peux avancer dans mon projet ! Merci à vous pour votre aide

  14. #14
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    777
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 777
    Par défaut
    Malheureusement tu ne pourras pas mettre en X86 car sharepoint ne tourne qu'en 64bit. Tu devras installer le provider xls en 64bit (si il en existe 1)

  15. #15
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    De ce que j'ai vu JET n'existe pas en 64 bits. Je sais pas si le passage à ACE se fait aisément mais c'est ce qui est préconisé sur les différentes sources que j'ai trouvées.

Discussions similaires

  1. [XL-2013] Méthode Workbooks.Open erreur 1004 non géré en natif
    Par ranzoken dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 24/08/2015, 11h25
  2. [VBA] Boucler sur la méthode Workbooks.Open plante Excel
    Par juliusmarat dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 26/09/2014, 17h39
  3. La propriété ConnectionString n'a pas été initialisée
    Par Ninpa dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 02/07/2013, 11h37
  4. Réponses: 9
    Dernier message: 07/10/2009, 16h30
  5. Réponses: 12
    Dernier message: 22/08/2009, 18h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo