Base de données de chaînes de connexion dynamique c #

9

im utilise toujours cette ligne de code pour la connexion:

 string ConnectString = "datasource = mysource; username = myusername; password = mypassword; database = mydatabasename";

Ce que j'essaie de faire à ce moment-là, c'est au lieu d'écrire chaque fois que mes données de serveur dans le script directement, je veux remplir une zone de texte. alors j'essaie de faire quelque chose comme ça

string ConnectString = "datasource = txtmysource.Text; username = txtmyusername.Text; password = txtmypassword.Text; database = txtmydatabasename.Text";

où txtmysource.Text / txtmyusername.Text / txtmypassword.Text / txtmydatabasename.Text sont les noms de zone de texte dans l'interface utilisateur. mais je ne trouve pas le moyen d'écrire pour le faire.

Raouf Bessghaier
la source

Réponses:

28

Vous voulez probablement DbConnectionStringBuilder, idéalement celui qui convient à votre SGBDR - donc avec SQL Server:

var builder = new SqlConnectionStringBuilder
{
    UserID = txtmyusername.Text,
    DataSource = txtmysource.Text,
    Password = txtmypassword.Text,
    InitialCatalog = txtmydatabasename.Text,
};
var connectString = builder.ConnectionString;

Le point crucial ici est qu'il appliquera le caractère d'échappement approprié, etc. si (par exemple) l'un des éléments contient des caractères réservés / non triviaux tels que des espaces, des virgules, des guillemets, etc.

Marc Gravell
la source
2

Peut-être avec une chaîne d'interpolation comme celle-ci:

string ConnectString = $"datasource = {txtmysource.Text}; username = {txtmyusername.Text}; password = {txtmypassword.Text}; database = {txtmydatabasename.Text}";
François Borgies
la source
2
ce qui est bien jusqu'à ce que quelqu'un crée une base de données appelée a;b="c- ce qui est oui autorisé
Marc Gravell
Merci fixé maintenant avec votre solution
Raouf Bessghaier
2
@RaoufBessghaier vous devez le marquer comme réponse (coche verte) dans ce cas
Marc Gravell