2016-07-21 13 views
1

Ich benutze C#, .NET 4.5, VS2015.Dynamisch ändern Daten Adapter Verbindung

Ich möchte in der Lage sein, die Verbindungseigenschaft des Datenadapters dynamisch zu ändern. (während der Laufzeit).

Mit Blick auf Verbindungseigenschaft der Datenadapter, Anschluss ist eine private Einstellung:

private global::System.Data.SqlClient.SqlConnection _connection; 

private void InitConnection() { 
      this._connection = new global::System.Data.SqlClient.SqlConnection(); 
      this._connection.ConnectionString = global::Audit.Properties.Settings.Default.LoggingConnectionString; 
     } 

Ist es möglich, Verbindung von Tabellenadapter während der Laufzeit zu ändern?

EDIT:

Interessante daran ist, dass für Tischadapter mit ausgewählten Befehlen, Verbindungseigenschaft öffentlich ist, so ist es kein Problem, es zu ändern. Bei Adaptern mit Einfügebefehlen ist die Verbindung privat und ich weiß nicht, wie ich sie ändern soll. Natürlich spreche ich über Komponenten, die direkt vom Server-Explorer in die Entwurfsansicht des Datasets gezogen werden.

Beispiel für Auswahlbefehl (erzeugt als internes global):

internal global::System.Data.SqlClient.SqlConnection Connection { 
      get { 
       if ((this._connection == null)) { 
        this.InitConnection(); 
       } 
       return this._connection; 
      } 

Beispiel für Einsatzbefehl (als privat generiert):

private void InitCommandCollection() { 
      this._commandCollection = new global::System.Data.IDbCommand[1]; 
      this._commandCollection[0] = new global::System.Data.SqlClient.SqlCommand(); 
      ((global::System.Data.SqlClient.SqlCommand)(this._commandCollection[0])).Connection = new global::System.Data.SqlClient.SqlConnection(global::Audit.Properties.Settings.Default.LoggingConnectionString1); 

Antwort

0

Ich konnte diese Einschränkung überwinden, indem ich meine eigene Schaffung ConnectionString-Eigenschaft im TableAdapter. Sie müssen nur sicherstellen, dass es Teil des Namensbereichs von TableAdapter ist.

public partial class MyTableAdapter 
{ 
    public string ConnectionString 
    { 
     set 
     { 
      if ((this._commandCollection == null)) 
      { 
       this.InitCommandCollection(); 
      } 

      for (int index = 0; index < this._commandCollection.Length; index++) 
      { 
       this._commandCollection[index].Connection.ConnectionString = value; 
      } 
     } 
    } 
}