2017-02-08 5 views
0

Ich habe einige SQL Server, die identisch für die gespeicherten Daten ist, und ich möchte in der Lage sein, zwischen ihnen zu ändern, und wenn ich mehr hinzufügen möchte ich sie einfach mit einem Windows-Formular hinzufügen.Dynamische Verbindung zu mehreren SQL Servern mit C# Form?

Ich habe zuerst eine Datenbank erstellt, und dies ist die Verbindungszeichenfolge, die der App.config-Datei hinzugefügt wurde. Ich änderte den Benutzernamen und das Passwort aus Sicherheitsgründen

<add name="MigrateDBFaktura3Entities" 
      connectionString="metadata=res://*/DB.ServerData.csdl|res://*/DB.ServerData.ssdl|res://*/DB.ServerData.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=FASTEC-ATTEST\SQLEXPRESS;initial catalog=MigrateDBFaktura5;persist security info=True;user id=**;password=**;MultipleActiveResultSets=True;App=EntityFramework&quot;" 
      providerName="System.Data.EntityClient" /> 

Gibt es eine einfache Möglichkeit, zu ändern, wo ich die Daten aus bekommen sollte? Ich dachte, eine Combobox zu verwenden, wo ich wählen konnte, von welchem ​​SQL Server es die Daten erhalten sollte. Wenn ich die Verbindungszeichenfolge manuell ändere, funktioniert es. aber wie mache ich das mit Code?

+0

Combobox LocationModel ist eine gute Wahl ist. Sie können den letzten Wert für den nächsten Lauf speichern. das kann Zeit sparen. – A3006

+0

So etwas wie: http://StackOverflow.com/Questions/16511244/How-to-create-connection-string-dynamical-in-c-sharp vielleicht? –

Antwort

1

können Sie Klasse EntityConnectionStringBuilder verwenden, um Ihre Verbindungszeichenfolge zu erstellen. finden Sie hier mehr https://msdn.microsoft.com/en-us/library/orm-9780596520281-01-16.aspx und Programmatic Connection Strings in Entity Framework 6

// Specify the provider name, server and database. 
     string providerName = "System.Data.SqlClient"; 
     string serverName = "."; 
     string databaseName = "AdventureWorks"; 

     // Initialize the connection string builder for the 
     // underlying provider. 
     SqlConnectionStringBuilder sqlBuilder = 
      new SqlConnectionStringBuilder(); 

     // Set the properties for the data source. 
     sqlBuilder.DataSource = serverName; 
     sqlBuilder.InitialCatalog = databaseName; 
     sqlBuilder.IntegratedSecurity = true; 

     // Build the SqlConnection connection string. 
     string providerString = sqlBuilder.ToString(); 

     // Initialize the EntityConnectionStringBuilder. 
     EntityConnectionStringBuilder entityBuilder = 
      new EntityConnectionStringBuilder(); 

     //Set the provider name. 
     entityBuilder.Provider = providerName; 

     // Set the provider-specific connection string. 
     entityBuilder.ProviderConnectionString = providerString; 

     // Set the Metadata location. 
     entityBuilder.Metadata = @"res://*/AdventureWorksModel.csdl| 
         res://*/AdventureWorksModel.ssdl| 
         res://*/AdventureWorksModel.msl"; 
     Console.WriteLine(entityBuilder.ToString()); 

     using (EntityConnection conn = 
      new EntityConnection(entityBuilder.ToString())) 
     { 
      conn.Open(); 
      Console.WriteLine("Just testing the connection."); 
      conn.Close(); 
     } 
+0

Dan können wir das auch in der Windows App verwenden? – A3006

+0

Ja, Sie können das tun –

+0

Ich folgte der Anleitung zu Programmatic Connection Strings in Entity Framework 6, die Sie verknüpft haben. Aber wenn ich den 'MigrateDBFaktura3Entities temp = ConnectionHelper.CreateConnection (CurrentLocation);' Befehl ausführen und versuchen, Informationen von ihm mit 'var temp2 = temp.Anvandare.ToList() zu erhalten;' Ich bekomme ein '" Der zugrundeliegende Provider ist bei Open fehlgeschlagen "Inner Exeption" Anmeldung fehlgeschlagen. Die Anmeldung stammt aus einer nicht vertrauenswürdigen Domäne und kann nicht mit der Windows-Authentifizierung verwendet werden. "' Weißt du, warum das passiert? – Drago87

0

Was ich machen es tat zu arbeiten. Im Kontext-Datei geändert i

public MigrateDBFaktura3Entities() 
      : base("name=MigrateDBFaktura3Entities") 
     { 

     } 

zu

public MigrateDBFaktura3Entities (string connectionString) 
      : base(connectionString) 
     { 

     } 

Dann machte ich eine helperClass

class ConnectionHelper 
    { 
     public static string CreateConnectionString(LocationModel LM, string metaData) 
     { 
      const string appName = "EntityFramework"; 
      const string providerName = "System.Data.SqlClient"; 

      SqlConnectionStringBuilder sqlBuilder = new SqlConnectionStringBuilder(); 
      sqlBuilder.DataSource = LM.datasource; 
      sqlBuilder.InitialCatalog = LM.catalog; 
      sqlBuilder.UserID = LM.Username; 
      sqlBuilder.Password = LM.Password; 
      sqlBuilder.MultipleActiveResultSets = true; 
      sqlBuilder.PersistSecurityInfo = true; 
      sqlBuilder.ApplicationName = appName; 


EntityConnectionStringBuilder efBuilder = new EntityConnectionStringBuilder(); 
     efBuilder.Metadata = metaData; 
     efBuilder.Provider = providerName; 
     efBuilder.ProviderConnectionString = sqlBuilder.ConnectionString; 
     var t = efBuilder.ConnectionString; 
     return efBuilder.ConnectionString; 
    } 

    public static FastecData CreateConnection(LocationModel locationmodel, string metaData = "res://*/DB.ServerData.csdl|res://*/DB.ServerData.ssdl|res://*/DB.ServerData.msl") 
    { 
     return new FastecData(ConnectionHelper.CreateConnectionString(locationmodel, metaData)); 
    } 
} 

Die LocationModel Datenbank ist die purly die Daten für die verschiedenen Server enthält i verbinden um Daten zu erhalten.

Dann, wenn ich um eine Verbindung herzustellen benötigen muss ich nur

MigrateDBFaktura3Entities db = ConnectionHelper.CreateConnection(CurrentLocation) 

wo Current eine

Verwandte Themen