Datenbank für dynamische Verbindungszeichenfolgen c #

9

Ich benutze immer diese Codezeile für die Verbindung:

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

Was ich versuche, ist, anstatt jedes Mal, wenn meine Serverdaten direkt in ein Skript geschrieben werden, ein Textfeld zu füllen. Also versuche ich so etwas zu tun

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

Dabei ist txtmysource.Text / txtmyusername.Text / txtmypassword.Text / txtmydatabasename.Text die Namen des Textfelds in der Benutzeroberfläche. aber ich kann den Schreibweg nicht finden, um es zu tun.

Raouf Bessghaier
quelle

Antworten:

28

Sie möchten wahrscheinlich DbConnectionStringBuilder, idealerweise das richtige für Ihr RDBMS - also mit SQL Server:

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

Das Entscheidende dabei ist, dass das richtige Escapezeichen usw. angewendet wird, wenn (zum Beispiel) eines der Elemente reservierte / nicht triviale Zeichen wie Leerzeichen, Kommas, Anführungszeichen usw. enthält.

Marc Gravell
quelle
2

Vielleicht mit einer Interpolationszeichenfolge wie dieser:

string ConnectString = $"datasource = {txtmysource.Text}; username = {txtmyusername.Text}; password = {txtmypassword.Text}; database = {txtmydatabasename.Text}";
Francois Borgies
quelle
2
Das ist in Ordnung, bis jemand eine Datenbank namens a;b="c
Marc Gravell
Vielen Dank, dass Sie jetzt mit Ihrer Lösung
behoben haben
2
@ RaoufBessghaier Sie sollten es als die Antwort (grünes Häkchen) in diesem Fall
markieren