Base de datos de cadena de conexión dinámica c #

9

Siempre uso esta línea de código para la conexión:

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

Lo que intento hacer esta vez es en lugar de escribir cada vez que los datos de mi servidor en el script directamente quiero llenar un cuadro de texto. así que trato de hacer algo como esto

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

donde txtmysource.Text / txtmyusername.Text / txtmypassword.Text / txtmydatabasename.Text son los nombres del cuadro de texto en la interfaz de usuario. pero no puedo encontrar la forma de escribir para hacerlo.

Raouf Bessghaier
fuente

Respuestas:

28

Probablemente desee DbConnectionStringBuilder, idealmente el correcto para su RDBMS, así que con SQL Server:

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

Lo crucial aquí es que aplicará el carácter correcto de escape, etc., si (por ejemplo) alguno de los elementos contiene caracteres reservados / no triviales, como espacios en blanco, comas, comillas, etc.

Marc Gravell
fuente
2

Tal vez con una cadena interpolada como esta:

string ConnectString = $"datasource = {txtmysource.Text}; username = {txtmyusername.Text}; password = {txtmypassword.Text}; database = {txtmydatabasename.Text}";
Francois Borgies
fuente
2
lo cual está bien hasta que alguien cree una base de datos llamada a;b="c- que sí, está permitido
Marc Gravell
Gracias solucionado ahora con su solución
Raouf Bessghaier
2
@RaoufBessghaier debe marcarlo como la respuesta (marca verde) en ese caso
Marc Gravell