Udostępnij za pośrednictwem


Kodowanie menedżer połączeń do niestandardowych

Po utworzeniu klasy, która dziedziczy ConnectionManagerBase utworzyć klasę i stosowane DtsConnectionAttribute atrybut do klasy, należy zastąpić stosowania właściwości i metod klasy podstawowej umożliwiają korzystanie z funkcji niestandardowej.

Aby przykłady menedżerów niestandardowego połączenia Zobacz Developing a User Interface for a Custom Connection Manager i Excel2 Custom Connection Manager Sample. Przykłady kodu w tym temacie są pobierane z próbki menedżer połączeń i niestandardowy programu SQL Server.

Uwaga

Większość zadań, źródła i miejsca docelowe, które są wbudowane w Integration Services działa tylko z określonych typów połączenia wbudowanego menedżerów. Dlatego te przykłady nie można testować wbudowane zadania i składniki.

Konfigurowanie menedżer połączeń

Ustawianie właściwość ConnectionString

The ConnectionString() właściwość is an important właściwość and the only właściwość unique to a custom menedżer połączeń. Menedżer połączeń używa do łączenia się z danymi zewnętrznymi wartość tej właściwość urządzenie źródłowe.Jeżeli jest połączenie kilku innych właściwości, takie jak nazwa serwera i bazy danych, aby utworzyć ciąg połączenia służy funkcja pomocnika do łączenia ciągu zastępując pewne wartości w szablonie ciąg połączenia z nową wartością podane przez użytkownika.Poniższy przykład kodu pokazuje implementację ConnectionString() Właściwość, która korzysta z funkcja pomocnika do łączenia ciąg.

  ' Default values.
  Private _serverName As String = "(local)"
  Private _databaseName As String = "AdventureWorks"
  Private _connectionString As String = String.Empty

  Private Const CONNECTIONSTRING_TEMPLATE As String = _
    "Data Source=<servername>;Initial Catalog=<databasename>;Integrated Security=SSPI"

  Public Property ServerName() As String
    Get
      Return _serverName
    End Get
    Set(ByVal value As String)
      _serverName = value
    End Set
  End Property

  Public Property DatabaseName() As String
    Get
      Return _databaseName
    End Get
    Set(ByVal value As String)
      _databaseName = value
    End Set
  End Property

  Public Overrides Property ConnectionString() As String
    Get
      UpdateConnectionString()
      Return _connectionString
    End Get
    Set(ByVal value As String)
      _connectionString = value
    End Set
  End Property

  Private Sub UpdateConnectionString()

    Dim temporaryString As String = CONNECTIONSTRING_TEMPLATE

    If Not String.IsNullOrEmpty(_serverName) Then
      temporaryString = temporaryString.Replace("<servername>", _serverName)
    End If
    If Not String.IsNullOrEmpty(_databaseName) Then
      temporaryString = temporaryString.Replace("<databasename>", _databaseName)
    End If

    _connectionString = temporaryString

  End Sub
    // Default values.
    private string _serverName = "(local)";
    private string _databaseName = "AdventureWorks";
    private string _connectionString = String.Empty;

    private const string CONNECTIONSTRING_TEMPLATE = "Data Source=<servername>;Initial Catalog=<databasename>;Integrated Security=SSPI";

    public string ServerName
    {
      get
      {
        return _serverName;
      }
      set
      {
        _serverName = value;
      }
    }

    public string DatabaseName
    {
      get
      {
        return _databaseName;
      }
      set
      {
        _databaseName = value;
      }
    }

    public override string ConnectionString
    {
      get
      {
        UpdateConnectionString();
        return _connectionString;
      }
      set
      {
        _connectionString = value;
      }
    }

    private void UpdateConnectionString()
    {

      string temporaryString = CONNECTIONSTRING_TEMPLATE;

      if (!String.IsNullOrEmpty(_serverName))
      {
        temporaryString = temporaryString.Replace("<servername>", _serverName);
      }

      if (!String.IsNullOrEmpty(_databaseName))
      {
        temporaryString = temporaryString.Replace("<databasename>", _databaseName);
      }

      _connectionString = temporaryString;

    }

Sprawdzanie poprawności Menedżer połączeń

Można zastąpić Validate(IDTSInfoEvents) Metoda, aby upewnić się, że Menedżer połączeń został poprawnie skonfigurowany. Jako minimum należy sprawdzić format ciąg połączenia i upewnij się, że podania wartości dla wszystkich argumentów.Wykonanie nie może być kontynuowana aż do momentu powrotu Menedżer połączeń Success() z Validate(IDTSInfoEvents) Metoda.

Poniższy przykład kodu pokazuje implementację Validate(IDTSInfoEvents) sprawia, że użytkownik określił nazwa serwera dla połączenia.

  Public Overrides Function Validate(ByVal infoEvents As Microsoft.SqlServer.Dts.Runtime.IDTSInfoEvents) As Microsoft.SqlServer.Dts.Runtime.DTSExecResult

    If String.IsNullOrEmpty(_serverName) Then
      infoEvents.FireError(0, "SqlConnectionManager", "No server name specified", String.Empty, 0)
      Return DTSExecResult.Failure
    Else
      Return DTSExecResult.Success
    End If

  End Function
    public override Microsoft.SqlServer.Dts.Runtime.DTSExecResult Validate(Microsoft.SqlServer.Dts.Runtime.IDTSInfoEvents infoEvents)
    {

      if (String.IsNullOrEmpty(_serverName))
      {
        infoEvents.FireError(0, "SqlConnectionManager", "No server name specified", String.Empty, 0);
        return DTSExecResult.Failure;
      }
      else
      {
        return DTSExecResult.Success;
      }

    }

Pozostające Menedżer połączeń

Zazwyczaj nie trzeba zaimplementować trwałość niestandardowych dla menedżer połączeń.Trwałość niestandardowego jest wymagany tylko wtedy, gdy złożone typy danych za pomocą właściwości obiektu.Aby uzyskać więcej informacji zobaczOpracowywanie niestandardowych obiektów dla usług integracja Services.

Praca z zewnętrznego urządzenie źródłowe danych

Metody, które obsługują połączenia ze źródłem danych zewnętrznych są najważniejszych metod menedżer połączeń niestandardowych.The AcquireConnection(Object) and ReleaseConnection(Object) methods are called at various times during both design czas and run czas.

Pobieranie połączenia

Należy zdecydować, jaki typ obiektu jest, aby AcquireConnection(Object) Metoda powinna zwrócić z menedżer połączeń niestandardowych. Na przykład Menedżer połączeń do pliku zwraca tylko ciąg, który zawiera ścieżka i nazwę pliku, dlatego zarządcę połączenia ADO.NET zwraca obiekt połączenia zarządzanego, który jest już otwarty.menedżer połączeń OLE DB zwraca macierzystym obiekt połączenia OLE DB, które nie mogą być używane z kod zarządzany.Niestandardowy Menedżer połączeń programu SQL Server, z którego pobierane są wstawki kodu programu w tym temacie, zwraca otwarty SqlConnection obiekt.

Użytkownicy programu Menedżer połączeń musi znać wcześniej typ obiektu, który ma być dodawana, dzięki czemu mogą rzutować na odpowiedni typ zwracany obiekt i uzyskać dostęp do jego metody i właściwości.

  Public Overrides Function AcquireConnection(ByVal txn As Object) As Object

    Dim sqlConnection As New SqlConnection

    UpdateConnectionString()

    With sqlConnection
      .ConnectionString = _connectionString
      .Open()
    End With

    Return sqlConnection

  End Function
    public override object AcquireConnection(object txn)
    {

      SqlConnection sqlConnection = new SqlConnection();

      UpdateConnectionString();

      {
        sqlConnection.ConnectionString = _connectionString;
        sqlConnection.Open();
      }

      return sqlConnection;

    }

Zwalnianie połączenia

akcja Sporządzane w ReleaseConnection(Object) metoda zależy od typu obiektu, który zwrócił z AcquireConnection(Object) Metoda. Jeśli obiekt z otwartym połączeniem, należy go zamknąć i zwolnić wszystkie zasoby, który go używa.Jeśli AcquireConnection(Object) zwrócona wartość ciąg, żadne działanie musi należy podjąć.

  Public Overrides Sub ReleaseConnection(ByVal connection As Object)

    Dim sqlConnection As SqlConnection

    sqlConnection = DirectCast(connection, SqlConnection)

    If sqlConnection.State <> ConnectionState.Closed Then
      sqlConnection.Close()
    End If

  End Sub
    public override void ReleaseConnection(object connection)
    {
      SqlConnection sqlConnection;
      sqlConnection = (SqlConnection)connection;
      if (sqlConnection.State != ConnectionState.Closed)
        sqlConnection.Close();
    }
Integration Services icon (small) Konfiguracja w aktualizacji z usług integracja Services pobytu

Najnowsze pliki do pobrania, artykuły, próbki, i pliki wideo firmy Microsoft, jak również wybranego rozwiązania od Wspólnoty, odwiedź witrynę Integration Services strona w witrynie MSDN lub TechNet:

Automatycznego powiadomienie tych aktualizacji należy subskrybować źródła danych RSS, które jest dostępne strona.

Historia zmian

Microsoft Learning

  • Należy zauważyć, że w tym artykule wyjaśniono, dlaczego nie można testować przykłady niestandardowych wbudowane zadania i składniki w dodany Integration Services.