База данных строк динамического соединения c #

9

Я всегда использую эту строку кода для подключения:

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

То, что я пытаюсь сделать в этот раз, вместо того, чтобы писать каждый раз, когда данные моего сервера в сценарии напрямую, я хочу заполнить текстовое поле. так что я пытаюсь сделать что-то подобное

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

где txtmysource.Text / txtmyusername.Text / txtmypassword.Text / txtmydatabasename.Text являются именами текстового поля в пользовательском интерфейсе. но я не могу найти способ написать это.

Рауф Бессхайер
источник

Ответы:

28

Вы, вероятно, хотите DbConnectionStringBuilder, в идеале правильный для вашей СУБД - так с SQL Server:

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

Ключевым моментом здесь является то, что он будет применять правильный экранирующий символ и т. Д., Если (например) любой из элементов содержит зарезервированные / нетривиальные символы, такие как пробел, запятые, кавычки и т. Д.

Марк Гравелл
источник
2

Может быть, с интерполяцией строки, как это:

string ConnectString = $"datasource = {txtmysource.Text}; username = {txtmyusername.Text}; password = {txtmypassword.Text}; database = {txtmydatabasename.Text}";
Франсуа Борджи
источник
2
это нормально, пока кто-то не создаст базу данных под названием a;b="c- что да, разрешено
Марк Грэвелл
Спасибо, что исправили ваше решение
Рауф Бессхайер
2
@RaoufBessghaier, вы должны пометить его как ответ (зеленая галочка) в этом случае
Марк Гравелл