2017-06-15 4 views
0

C# sur VisualStudio 2017. Application Windows Forms.ConnectionString avec fichier externe pour SqlConnection

Bonjour à tous. J'ai lu sur le web qu'il n'est pas possible d'utiliser un fichier .udl dans lequel écrire un ConnectionString pour un SqlConnection. Est-ce vrai à aujourd'hui? Et, si oui, il existe une autre façon d'utiliser un fichier externe pour un ConnectionString dans SqlConnetion?

je dois courir projet dans 5 PC qui ont des chaînes de connexion différentes, par exemple:

PC1) Data Source = PCNAME \ SQLEXPRESS; Initial Catalog = DBNEW; utilisateur ID = sa; Mot de passe = 123; PC2) Source de données = SERVEUR \ SQLEXPRESS; Catalogue initial = DB; ID utilisateur = sa; Mot de passe = 999;

[...]

Actuellement, j'utiliser une chaîne dans le projet

string connSQL = "Data Source=.\\SQLEXPRESS;Initial Catalog=DBNEW;Persist Security Info=True;User ID=sa;Password=123;"; 

que je dois changer cinq fois pour une connexion différente des cinq PC.

J'ai essayé quand même de se connecter avec un fichier .udl

string connSQL = "Data Source=.\\SQLEXPRESS;AttachDbFile=C:\\connstring.udl"; 

qui contient ce

[oledb] 
; Everything after this line is an OLE DB initstring 
Data Source=PCNAME\SQLEXPRESS;Initial Catalog=DBNEW;Persist Security Info=True;User ID=sa;Password=123; 

mais bien sûr, il ne fonctionne.

Des idées pour une solution alternative?

+1

Je voudrais créer une page de connexion et transmettre le nom d'utilisateur et mot de passe de la chaîne de connexion dans le fichier .Config en utilisant des paramètres par exemple '' alors quand vous lisez le fichier de configuration, vous voulez ajouter 2 paramètres supplémentaires lorsque vous lisez le fichier .config .. – MethodMan

+1

@MethodMan Oui, je pense que c'est le meilleure alternative. Et en étudiant votre réponse, j'ai réussi à trouver un compromis! Regardez ma réponse ci-dessous. Donc, merci beaucoup pour l'indice. ;) – Wiccio

+0

pas un problème juste heureux de vous diriger dans la bonne direction et heureux que vous ayez tenu compte du conseil – MethodMan

Répondre

1

Enfin j'ai trouvé une solution. Merci également à MethodMan de commentaire j'ai réalisé plus tard que vous pouvez utiliser un fichier externe pour compiler le connectionString, qui est MyProjectName.exe.config, qui est enregistré dans le même répertoire que l'exécutable du logiciel, et qui a les mêmes fonctions et paramètres du App.config.

Alors ce que je faisais est de créer une nouvelle FormConn où vous entrez manuellement les données pour le connectionString, les écraser dans MyProjectName.exe.config et liez ce fichier à Form1 pour la gestion de base de données SQL. Ci-dessous le code.

Dans les Form1.cs:

using System.Configuration; 

public Form1() 
{ 
    //Check if a connectionString already exists 
    //To the first slot there is a system configuration so 1 = no custom connectionString 
    if (ConfigurationManager.ConnectionStrings.Count == 1) 
     { 
      FormConn frmConn = new FormConn(); 
      frmConn.ShowDialog(); 
      try 
      { 
       //Restart Form1 in the case connectionString has changed 
       Application.Restart(); 
      } 
      catch(Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 
     } 
     //Associates the custom connectionString to the string I will use in the code for operations that are connected to the DB. 
     StringSQL = ConfigurationManager.ConnectionStrings[1].ConnectionString; 
} 

Dans le FormConn.cs:

FormConn (Design)

using System.Configuration; 
using System.Reflections; 

string appPath = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); 
     string appName = Environment.GetCommandLineArgs()[0]; 
     string configFile = System.IO.Path.Combine(appPath, appName + ".config"); 
     ExeConfigurationFileMap configFileMap = new ExeConfigurationFileMap(); 
     configFileMap.ExeConfigFilename = configFile; 
     System.Configuration.Configuration config = ConfigurationManager.OpenMappedExeConfiguration(configFileMap, ConfigurationUserLevel.None); 
     var sezione = (ConnectionStringsSection)config.GetSection("connectionStrings");<br>sezione.ConnectionStrings["MyProjectName.Properties.Settings.MyDataSetConnectionString"].ConnectionString = "Data Source=" + txtDataSource.Text + ";Initial Catalog=" + txtInitialCatalog.Text + ";Persist Security Info=True;User ID=" + txtUserID.Text + ";Password=" + txtPassword.Text + ";"; 
     config.Save(); 
     ConfigurationManager.RefreshSection("connectionStrings"); 
     this.Close(); 

Et voilà ce que j'ai dans mon MyProjectName.exe.config:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    </configSections> 
<connectionStrings> 
    <add name="MyProjectName.Properties.Settings.MyDataSetConnectionString" 
     connectionString="Data Source=MyPcName\SQLEXPRESS;Initial Catalog=DB-1;Persist Security Info=True;User ID=sa;Password=123psw321" 
     providerName="System.Data.SqlClient" /> 
</connectionStrings> 
<startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" /> 
</startup> 
</configuration> 

Cela a fonctionné pour moi!

+0

Évidemment, vous pouvez changer le * connectionString * manuellement et directement à partir du fichier * MyProjectName.exe.config * sans avoir besoin d'utiliser le * FormConn *. – Wiccio