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

VB.NET Discussion :

Modification de l'emplacement de la Base de Données pendant l'execution


Sujet :

VB.NET

  1. #1
    Membre du Club
    Inscrit en
    Mars 2011
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 41
    Points : 40
    Points
    40
    Par défaut Modification de l'emplacement de la Base de Données pendant l'execution
    Bonjour,
    l'emplacement de la base de données ayant été modifié, j'ai essayé à partir de app.config de modifier l'emplacement de la BD pour indiquer le nouvel emplacement mais à l'execution je recois le message d'un hachage contraire avec l'app.Manifest.

    Comment pourrai je contourner cet obstacle.
    Je vous en prie de m'aider svp

    Merci d'avance
    Lendcap

  2. #2
    Membre averti Avatar de Saintelaitlait
    Homme Profil pro
    Responsable ServiceDesk
    Inscrit en
    Août 2011
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Responsable ServiceDesk
    Secteur : Service public

    Informations forums :
    Inscription : Août 2011
    Messages : 179
    Points : 355
    Points
    355
    Par défaut
    Perso je stock la chaîne de connexion dans les appSettings dans le fichier de config. J'ai jamais rencontré ce problème.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      <appSettings>
            <add key="connexionBD" value="Data Source=nomServeur\instance;Initial Catalog=nomBD;Integrated Security=TRUE;"/>
      </appSettings>
    Tu devra modifier ton appli pour qu'elle puisse lire cette partie du fichier de config si jamais tu veux travailler comme ca

  3. #3
    Membre du Club
    Inscrit en
    Mars 2011
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 41
    Points : 40
    Points
    40
    Par défaut
    Bonjour Saintelaitlait et merci pour la promtitude de ta réaction,

    J'ai bien suivi ta recommandation mais je voudrai comprendre ce que devient le connection string dans le fichier de configuration généré automatiquement au moment du deploiement. Faut-il d'abord le modifier avant de definir l'app.Settings ou faut-il directement definir l'application settings comme tu me l'as indiqué?

    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
    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <configSections>
        <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
          <section name="EasyPharma.My.MySettings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
        </sectionGroup>
      </configSections>
      <connectionStrings>
        <add name="EasyPharma.My.MySettings.PharmaDataConnectionString"
          connectionString="Data Source=LENDCAP-PC\PHARMADATASERVER;Initial Catalog=&quot;C:\PROGRAM FILES\MICROSOFT SQL SERVER\MSSQL10_50.PHARMADATASERVER\MSSQL\DATA\EasyData.MDF&quot;;Integrated Security=True"
          providerName="System.Data.SqlClient" />
        <add name="DefaultConnection" connectionString="Data Source = |SQL/CE|" />
        <add name="DefaultConnection1" connectionString="Data Source = |SQL/CE|" />
        <add name="DefaultConnection2" connectionString="Data Source = |SQL/CE|" />
      </connectionStrings>
      <system.diagnostics>
        <sources>
          <!-- This section defines the logging configuration for My.Application.Log -->
          <source name="DefaultSource" switchName="DefaultSwitch">
            <listeners>
              <add name="FileLog" />
              <!-- Uncomment the below section to write to the Application Event Log -->
              <!--<add name="EventLog"/>-->
            </listeners>
          </source>
        </sources>
        <switches>
          <add name="DefaultSwitch" value="Information" />
        </switches>
        <sharedListeners>
          <add name="FileLog" type="Microsoft.VisualBasic.Logging.FileLogTraceListener, Microsoft.VisualBasic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" initializeData="FileLogWriter" />
          <!-- Uncomment the below section and replace APPLICATION_NAME with the name of your application to write to the Application Event Log -->
          <!--<add name="EventLog" type="System.Diagnostics.EventLogTraceListener" initializeData="APPLICATION_NAME"/> -->
        </sharedListeners>
      </system.diagnostics>
      <userSettings>
        <EasyPharma.My.MySettings>
          <setting name="Setting" serializeAs="String">
            <value />
          </setting>
        </EasyPharma.My.MySettings>
      </userSettings>
      <appSettings>
        <add key="ClientSettingsProvider.ServiceUri" value="" />
        <add key="ClientSettingsProvider.ConnectionStringName" value="DefaultConnection2" />
      </appSettings>
      <system.web>
        <membership defaultProvider="ClientAuthenticationMembershipProvider">
          <providers>
            <add name="ClientAuthenticationMembershipProvider" type="System.Web.ClientServices.Providers.ClientWindowsAuthenticationMembershipProvider, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" connectionStringName="DefaultConnection2" credentialsProvider="" />
          </providers>
        </membership>
        <roleManager defaultProvider="ClientRoleProvider" enabled="true">
          <providers>
            <add name="ClientRoleProvider" type="System.Web.ClientServices.Providers.ClientRoleProvider, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" cacheTimeout="86400" connectionStringName="DefaultConnection2" />
          </providers>
        </roleManager>
      </system.web>
    </configuration>
    Merci d'avance pour tes conseils avisés.

    Lendcap

  4. #4
    Membre averti Avatar de Saintelaitlait
    Homme Profil pro
    Responsable ServiceDesk
    Inscrit en
    Août 2011
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Responsable ServiceDesk
    Secteur : Service public

    Informations forums :
    Inscription : Août 2011
    Messages : 179
    Points : 355
    Points
    355
    Par défaut
    Salut,

    Je définie moi même la chaîne de connexion dans le fichier de config. J'ajoute la partie appSetting à la main.

    En exemple, le "petit" fichier de config d'une toute petite application.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <startup>
            <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client" />
        </startup>
      <appSettings>   
        <add key="connexionBD" value="Data Source=serveur\instance;Initial Catalog=bd;Integrated Security=TRUE;"/>
      </appSettings>
    </configuration>
    en fait je la ramasse comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     If Not String.IsNullOrWhiteSpace(ConfigurationManager.AppSettings("connexionBD")) Then
                config.connexionBD = ConfigurationManager.AppSettings("connexionBD")
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      sqlCon = New SqlConnection(config.connexionBD)
    Perso, quand je travail comme ceci, .net ne génère pas de connectionString dans mon fichier de config. Faudrait voir de quelle manière tu fonctionne exactement.

  5. #5
    Membre du Club
    Inscrit en
    Mars 2011
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 41
    Points : 40
    Points
    40
    Par défaut
    Salut Saintelaitlait,

    j'avoue que j'ai beaucoup essayé de ta solution mais je n'arrive pas à l'implementer.

    Tu devra modifier ton appli pour qu'elle puisse lire cette partie du fichier de config si jamais tu veux travailler comme ca
    Comment devrais modifier mon appli. dans mon appli, je definis le connectionstring (Nom, Portée, Valeur) dans le fichier de configuration ce qui fait que l'app.config est généré automatiquement avec toutes ces valeurs.

    Par contre j'aimerai bien essayé ton process parce que je pense que cela resoudra mon problème. Pourrais tu alors s'il te plait m'indiquer :

    -comment modifier mon appli pour que le fichier de configuration ne génère pas de connectionstrings

    -A quel evènement du settings.vb devrais je attacher ceci

    en fait je la ramasse comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     If Not String.IsNullOrWhiteSpace(ConfigurationManager.AppSettings("connexionBD")) Then
                config.connexionBD = ConfigurationManager.AppSettings("connexionBD")
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      sqlCon = New SqlConnection(config.connexionBD)
    Merci d'avance pour ton aide.

    Lendcap

  6. #6
    Membre éclairé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2012
    Messages
    330
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2012
    Messages : 330
    Points : 774
    Points
    774
    Par défaut
    Bonjour,

    Pour palier à ce problème, tu peux utiliser un setting dans lequel tu n'enregistre que le chemin d'accès à ta base de donnée (ex : C:\User\MesDocuments\exemple.sdf)

    Comme tu connais le type de base de donnée, par concaténation tu peux recrée la connectionString

    ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim DBConnectionString As String
    DBConnectionString = "Data Source=" + My.Settings.DBPath.ToString
    Pour finir, il te faut créer une procédure qui te permet au lancement de l'application de vérifier si la base de données se trouve bien au chemin d'accès donné par ton setting. Si elle y est, tu continue ton application normalement. Si elle n'y est pas, tu en informe l'utilisateur et tu lui propose de la chercher lui même (ou encore créer une fonction te permettant de la rechercher automatiquement).

    ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    If File.Exists(My.Settings.DBPath.ToString) = False Then
        'Si la base de donnée n'est pas à l'emplacement spécifié
        Dim _FileDialog As New OpenFileDialog
        If _FileDialog.ShowDialog() = Windows.Forms.DialogResult.OK Then
            My.Settings.DBPath = _FileDialog.FileName.ToString
        End If
    End If
    Perso je fais comme ça ça évite bien des erreurs.

    En espérant t'avoir aidé.

  7. #7
    Membre du Club
    Inscrit en
    Mars 2011
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 41
    Points : 40
    Points
    40
    Par défaut
    Salut Rainu,

    Comme tu connais le type de base de donnée, par concaténation tu peux recrée la connectionString
    sur quel objet et à quel evenement de cet objet devrais je attacher ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim DBConnectionString As String
    DBConnectionString = "Data Source=" + My.Settings.DBPath.ToString
    Merci d'avance pour ton aide

    Lendcap

  8. #8
    Membre éclairé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2012
    Messages
    330
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2012
    Messages : 330
    Points : 774
    Points
    774
    Par défaut
    Bonjour,

    Tu peux le mettre un peu ou tu veux

    Plus sérieusement, à chaque fois que je lance l'application (.Load du formulaire de démarage) je vérifie que ma base de donnée est bien à l'emplacement spécifié dans My.Settings.DbPath

    Si la base de données est trouvée, je ne modifie pas la chaine de connection que tu peux stocker également dans My.Settings.

    Perso, je créé mes DataTable et DataTableAdapter par code donc je n'utilise la chaine de connection que quand j'en ai besoin.

    Si tu te sert de l'automatisation de visual studio pour créer tes objets, tu peux créer tes objets normalement, puis modifier dans My.Settings le type de chaine en string et mettre la portée en utilisateur pour pouvoir la modifier quand tu le veux.

    Si tu fait comme ça, c'est la chaine de connection complète qu'il te faut enregistrer
    ex: "Data Source=C:\MesDocuments\..."
    C'est un peux du bricolage mais ça fonctionne.

    Dans le post précédent, j'ai omis de mettre : My.Settings.Save() pour sauvegarder les modifications de settings.

    Jettes un coup d'oeuil sur l'appli ci jointe.
    Fichiers attachés Fichiers attachés

  9. #9
    Membre du Club
    Inscrit en
    Mars 2011
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 41
    Points : 40
    Points
    40
    Par défaut
    Salut Rainu,

    Jettes un coup d'oeuil sur l'appli ci jointe.
    Fichiers attachés WindowsApplication2
    Cette application est très explicit et je n'ai eu auccun mal à implementer cette logique dans le fonctionnement de mon projet sauf que lors de la 2ème execution je reçois un message d'erreur "le mot clé datasource n'est pas géré". j'ai essayé d'y trouver une solution sans succès. Pourrais tu t'y pencher encore stp.

    Par contre où est enregistré la chaine de connexion après la modification ?

    Merci d'avance pour tes conseils avisés

    Lendcap

  10. #10
    Membre éclairé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2012
    Messages
    330
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2012
    Messages : 330
    Points : 774
    Points
    774
    Par défaut
    Bonjour,

    N'aurais tu pas fait une erreur dans la création de la chaîne de connection? (style "datasource =" au lieu de "DataSource =")

    La chaîne de connection complète est enregistrée dans My.Settings.Database1ConnectionString pour l'application que je t'ai faite passer.

Discussions similaires

  1. [SQL-Server] Modification de l'heure dans une base de donnée
    Par dekker dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 13/12/2010, 18h16
  2. Réponses: 0
    Dernier message: 01/04/2009, 14h01
  3. Répercuter Modification d'un .edmx sur la base de données
    Par Arnard dans le forum Visual Studio
    Réponses: 0
    Dernier message: 18/11/2008, 16h49
  4. Changer l'emplacement de la base de donnée
    Par bdgtat dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 08/03/2007, 14h35
  5. Recherche classe pour ajout/modif/suppression d'articles dans une base de donnée
    Par will89 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 02/02/2007, 12h59

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