D'abord, vous voudrez peut-être ajouter
using System.Configuration;
à votre fichier .cs. S'il n'est pas disponible, ajoutez-le via les références du projet car il n'est pas inclus par défaut dans un nouveau projet.
Ceci est ma solution à ce problème. J'ai d'abord créé la classe ConnectionProperties qui enregistre les éléments dont j'ai besoin de changer dans la chaîne de connexion d'origine. La variable _name dans la classe ConnectionProperties est importante pour être le nom de connectionString La première méthode prend une chaîne de connexion et modifie l'option souhaitée avec la nouvelle valeur.
private String changeConnStringItem(string connString,string option, string value)
{
String[] conItems = connString.Split(';');
String result = "";
foreach (String item in conItems)
{
if (item.StartsWith(option))
{
result += option + "=" + value + ";";
}
else
{
result += item + ";";
}
}
return result;
}
Vous pouvez modifier cette méthode pour répondre à vos besoins. J'ai les deux connexions mysql et mssql donc j'avais besoin des deux. Bien sûr, vous pouvez affiner ce projet de code pour vous-même.
private void changeConnectionSettings(ConnectionProperties cp)
{
var cnSection = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
String connString = cnSection.ConnectionStrings.ConnectionStrings[cp.Name].ConnectionString;
connString = changeConnStringItem(connString, "provider connection string=\"data source", cp.DataSource);
connString = changeConnStringItem(connString, "provider connection string=\"server", cp.DataSource);
connString = changeConnStringItem(connString, "user id", cp.Username);
connString = changeConnStringItem(connString, "password", cp.Password);
connString = changeConnStringItem(connString, "initial catalog", cp.InitCatalogue);
connString = changeConnStringItem(connString, "database", cp.InitCatalogue);
cnSection.ConnectionStrings.ConnectionStrings[cp.Name].ConnectionString = connString;
cnSection.Save();
ConfigurationManager.RefreshSection("connectionStrings");
}
Comme je ne voulais pas ajouter d'informations triviales, j'ai ignoré la zone Propriétés de mon code. Veuillez l'ajouter si vous voulez que cela fonctionne.
class ConnectionProperties
{
private String _name;
private String _dataSource;
private String _username;
private String _password;
private String _initCatalogue;
/// <summary>
/// Basic Connection Properties constructor
/// </summary>
public ConnectionProperties()
{
}
/// <summary>
/// Constructor with the needed settings
/// </summary>
/// <param name="name">The name identifier of the connection</param>
/// <param name="dataSource">The url where we connect</param>
/// <param name="username">Username for connection</param>
/// <param name="password">Password for connection</param>
/// <param name="initCat">Initial catalogue</param>
public ConnectionProperties(String name,String dataSource, String username, String password, String initCat)
{
_name = name;
_dataSource = dataSource;
_username = username;
_password = password;
_initCatalogue = initCat;
}
// Enter corresponding Properties here for access to private variables
}
S'il vous plaît reformater correctement extrait de code. C'est très difficile à lire maintenant. – Cerebrus