Banco de dados de cadeia de conexão dinâmica c #

9

eu sempre uso esta linha de código para conexão:

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

O que estou tentando fazer neste momento é, em vez de escrever cada vez que meus dados do servidor em script diretamente, quero preencher alguma caixa de texto. então eu estou tentando fazer algo assim

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

onde txtmysource.Text / txtmyusername.Text / txtmypassword.Text / txtmydatabasename.Text são os nomes da caixa de texto na interface do usuário. mas não consigo encontrar a maneira de escrever para fazer isso.

Raouf Bessghaier
fonte

Respostas:

28

Você provavelmente deseja o DbConnectionStringBuilderideal para o seu RDBMS - portanto, com o SQL Server:

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

O ponto crucial aqui é que ele aplicará o caractere correto, escapando, etc. se (por exemplo) qualquer um dos elementos contiver caracteres reservados / não triviais, como espaço em branco, vírgulas, aspas, etc.

Marc Gravell
fonte
2

Talvez com string interpolada como esta:

string ConnectString = $"datasource = {txtmysource.Text}; username = {txtmyusername.Text}; password = {txtmypassword.Text}; database = {txtmydatabasename.Text}";
Francois Borgies
fonte
2
o que é bom até que alguém crie um banco de dados chamado a;b="c- que sim, é permitido
Marc Gravell
Obrigado, corrigido agora com a sua solução
Raouf Bessghaier 12/12/19
2
@RaoufBessghaier, você deve marcá-la como a resposta (marca verde) nesse caso #
Marc Gravell