Baza danych dynamicznych parametrów połączenia c #

9

zawsze używam tego wiersza kodu do połączenia:

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

To, co próbuję zrobić tym razem, to zamiast pisać za każdym razem, gdy moje dane serwera są bezpośrednio w skrypcie, chcę wypełnić pole tekstowe. więc próbuję zrobić coś takiego

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

gdzie txtmysource.Text / txtmyusername.Text / txtmypassword.Text / txtmydatabasename.Text to nazwy pól tekstowych w interfejsie użytkownika. ale nie mogę znaleźć sposobu, aby to zrobić.

Raouf Bessghaier
źródło

Odpowiedzi:

28

Prawdopodobnie chcesz DbConnectionStringBuilder, najlepiej odpowiedni dla twojego RDBMS - więc z SQL Server:

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

Kluczową kwestią jest to, że zastosuje poprawne znaki ucieczki itp., Jeśli (na przykład) którykolwiek z elementów zawiera znaki zastrzeżone / nietrywialne, takie jak białe znaki, przecinki, cudzysłowy itp.

Marc Gravell
źródło
2

Może z takim ciągiem interpolacji:

string ConnectString = $"datasource = {txtmysource.Text}; username = {txtmyusername.Text}; password = {txtmypassword.Text}; database = {txtmydatabasename.Text}";
Francois Borgies
źródło
2
co jest w porządku, dopóki ktoś nie utworzy bazy danych o nazwie a;b="c- co tak, jest dozwolone
Marc Gravell
Dziękuję naprawione teraz z rozwiązaniem
Raouf Bessghaier,
2
@RaoufBessghaier powinieneś zaznaczyć to jako odpowiedź (zielony ptaszek) w tym przypadku
Marc Gravell