カスタム接続マネージャ用ユーザー インターフェイスの開発

基本クラスのプロパティとメソッドをオーバーライドしてカスタム機能を提供したら、接続マネージャ用のカスタム ユーザー インターフェイスを作成します。カスタム ユーザー インターフェイスを作成しない場合、ユーザーは [プロパティ] ウィンドウを使用して接続マネージャを構成することしかできません。

1 つのカスタム ユーザー インターフェイスのプロジェクトまたはアセンブリには、通常 2 つのクラスがあります。IDtsConnectionManagerUI を実装するクラスと、このクラスによって表示される、ユーザーから情報を収集するための Windows フォームです。

ms403352.note(ja-jp,SQL.90).gif重要 :
カスタム オブジェクトのビルド、配置、およびデバッグ」で説明されているようにカスタム ユーザー インターフェイスに署名してビルドし、グローバル アセンブリ キャッシュにインストールしたら、このクラスの完全修飾名を DtsConnectionAttributeUITypeName プロパティで忘れずに指定してください。
ms403352.note(ja-jp,SQL.90).gifメモ :
カスタム接続マネージャの実際のサンプルについては、「SQL Server Custom Connection Manager サンプル」および「Excel2 Custom Connection Manager サンプル」を参照してください。 なお、このトピックのコード例は、Sql Server Custom Connection Manager サンプルを基にしています。

ユーザー インターフェイス クラスのコーディング

IDtsConnectionManagerUI インターフェイスには、以下に説明する 4 つのメソッドがあります。ユーザーが接続マネージャのインスタンスを削除したときにクリーンアップを実行する必要がない場合、Delete メソッドのコードを記述する必要はありません。

ユーザー インターフェイスの初期化

Initialize メソッドで、デザイナは設定対象の接続マネージャへの参照を提供し、ユーザー インターフェイスでそのプロパティを変更できるようにします。コードでは、この参照を後で使用できるようにキャッシュする必要があります。

Public Sub Initialize(ByVal connectionManager As Microsoft.SqlServer.Dts.Runtime.ConnectionManager, ByVal serviceProvider As System.IServiceProvider) Implements Microsoft.SqlServer.Dts.Runtime.Design.IDtsConnectionManagerUI.Initialize

    _connectionManager = connectionManager
    _serviceProvider = serviceProvider

  End Sub
    public void Initialize(Microsoft.SqlServer.Dts.Runtime.ConnectionManager connectionManager, System.IServiceProvider serviceProvider)
    {

      _connectionManager = connectionManager;
      _serviceProvider = serviceProvider;

    }

ユーザー インターフェイスの新しいインスタンスの作成

New メソッドはコンストラクタではありません。このメソッドは、ユーザーが接続マネージャの新しいインスタンスを作成したときに、Initialize メソッドの後に呼び出されます。このメソッドでは、ユーザーが既存の接続マネージャをコピーし、貼り付けていない限り、通常は編集用のフォームを表示します。

  Public Function [New](ByVal parentWindow As System.Windows.Forms.IWin32Window, ByVal connections As Microsoft.SqlServer.Dts.Runtime.Connections, ByVal connectionUIArgs As Microsoft.SqlServer.Dts.Runtime.Design.ConnectionManagerUIArgs) As Boolean Implements Microsoft.SqlServer.Dts.Runtime.Design.IDtsConnectionManagerUI.New

    Dim clipboardService As IDtsClipboardService

    clipboardService = _
      DirectCast(_serviceProvider.GetService(GetType(IDtsClipboardService)), IDtsClipboardService)
    If Not clipboardService Is Nothing Then
      ' If connection manager has been copied and pasted, take no action.
      If clipboardService.IsPasteActive Then
        Return True
      End If
    End If

    Return EditSqlConnection(parentWindow)

  End Function
  public bool New(System.Windows.Forms.IWin32Window parentWindow, Microsoft.SqlServer.Dts.Runtime.Connections connections, Microsoft.SqlServer.Dts.Runtime.Design.ConnectionManagerUIArgs connectionUIArgs)
    {
      IDtsClipboardService clipboardService;

      clipboardService = (IDtsClipboardService)_serviceProvider.GetService(typeof(IDtsClipboardService));
      if (clipboardService != null)
      // If connection manager has been copied and pasted, take no action.
      {
        if (clipboardService.IsPasteActive)
        {
          return true;
        }
      }

      return EditSqlConnection(parentWindow);
    }

接続マネージャの編集

編集用のフォームは New メソッドと Edit メソッドの両方から呼び出されるため、ヘルパ関数を使用して、フォームを表示するコードをカプセル化すると便利です。

  Private Function EditSqlConnection(ByVal parentWindow As IWin32Window) As Boolean

    Dim sqlCMUIForm As New SqlConnMgrUIFormVB

    sqlCMUIForm.Initialize(_connectionManager, _serviceProvider)
    If sqlCMUIForm.ShowDialog(parentWindow) = DialogResult.OK Then
      Return True
    Else
      Return False
    End If

  End Function
   private bool EditSqlConnection(IWin32Window parentWindow)
    {

      SqlConnMgrUIFormCS sqlCMUIForm = new SqlConnMgrUIFormCS();

      sqlCMUIForm.Initialize(_connectionManager, _serviceProvider);
      if (sqlCMUIForm.ShowDialog(parentWindow) == DialogResult.OK)
      {
        return true;
      }
      else
      {
        return false;
      }

    }

Edit メソッドでは、編集用のフォームを表示するだけです。

  Public Function Edit(ByVal parentWindow As System.Windows.Forms.IWin32Window, ByVal connections As Microsoft.SqlServer.Dts.Runtime.Connections, ByVal connectionUIArg As Microsoft.SqlServer.Dts.Runtime.Design.ConnectionManagerUIArgs) As Boolean Implements Microsoft.SqlServer.Dts.Runtime.Design.IDtsConnectionManagerUI.Edit

    Return EditSqlConnection(parentWindow)

  End Function
    public bool Edit(System.Windows.Forms.IWin32Window parentWindow, Microsoft.SqlServer.Dts.Runtime.Connections connections, Microsoft.SqlServer.Dts.Runtime.Design.ConnectionManagerUIArgs connectionUIArg)
    {

      return EditSqlConnection(parentWindow);

    }

ユーザー インターフェイス フォームのコーディング

IDtsConnectionManagerUI インターフェイスのメソッドを実装するユーザー インターフェイス クラスを作成したら、ユーザーが接続マネージャのプロパティを変更できる Windows フォームを作成する必要があります。

ユーザー インターフェイス フォームの初期化

編集用のカスタム フォームを表示するときは、フォーム クラスのカスタム コンストラクタを使用するか、以下に示すような独自の Initialize メソッドを作成することにより、編集対象の接続マネージャへの参照を渡すことができます。

  Public Sub Initialize(ByVal connectionManager As ConnectionManager, ByVal serviceProvider As IServiceProvider)

    _connectionManager = connectionManager
    _serviceProvider = serviceProvider
    ConfigureControlsFromConnectionManager()
    EnableControls()

  End Sub
   public void Initialize(ConnectionManager connectionManager, IServiceProvider serviceProvider)
    {

      _connectionManager = connectionManager;
      _serviceProvider = serviceProvider;
      ConfigureControlsFromConnectionManager();
      EnableControls();

    }

ユーザー インターフェイス フォームでのプロパティの設定

最後に、フォーム クラスには、フォームを最初に読み込んだときに、接続マネージャのプロパティの既存の値や既定の値を使用してフォーム上のコントロールを設定するヘルパ関数が必要です。またフォーム クラスには、ユーザーが [OK] をクリックしてフォームを閉じたときに、プロパティの値をユーザーによって入力された値に設定する、同じような関数も必要です。

  Private Const CONNECTIONNAME_BASE As String = "SqlConnectionManager"

  Private Sub ConfigureControlsFromConnectionManager()

    Dim tempName As String
    Dim tempServerName As String
    Dim tempDatabaseName As String

    With _connectionManager

      tempName = .Properties("Name").GetValue(_connectionManager).ToString
      If Not String.IsNullOrEmpty(tempName) Then
        _connectionName = tempName
      Else
        _connectionName = CONNECTIONNAME_BASE
      End If

      tempServerName = .Properties("ServerName").GetValue(_connectionManager).ToString
      If Not String.IsNullOrEmpty(tempServerName) Then
        _serverName = tempServerName
        txtServerName.Text = _serverName
      End If

      tempDatabaseName = .Properties("DatabaseName").GetValue(_connectionManager).ToString
      If Not String.IsNullOrEmpty(tempDatabaseName) Then
        _databaseName = tempDatabaseName
        txtDatabaseName.Text = _databaseName
      End If

    End With

  End Sub

  Private Sub ConfigureConnectionManagerFromControls()

    With _connectionManager
      .Properties("Name").SetValue(_connectionManager, _connectionName)
      .Properties("ServerName").SetValue(_connectionManager, _serverName)
      .Properties("DatabaseName").SetValue(_connectionManager, _databaseName)
    End With

  End Sub
   private const string CONNECTIONNAME_BASE = "SqlConnectionManager";

   private void ConfigureControlsFromConnectionManager()
    {

      string tempName;
      string tempServerName;
      string tempDatabaseName;

      {
        tempName = _connectionManager.Properties["Name"].GetValue(_connectionManager).ToString();
        if (!String.IsNullOrEmpty(tempName))
        {
          _connectionName = tempName;
        }
        else
        {
          _connectionName = CONNECTIONNAME_BASE;
        }

        tempServerName = _connectionManager.Properties["ServerName"].GetValue(_connectionManager).ToString();
        if (!String.IsNullOrEmpty(tempServerName))
        {
          _serverName = tempServerName;
          txtServerName.Text = _serverName;
        }

        tempDatabaseName = _connectionManager.Properties["DatabaseName"].GetValue(_connectionManager).ToString();
        if (!String.IsNullOrEmpty(tempDatabaseName))
        {
          _databaseName = tempDatabaseName;
          txtDatabaseName.Text = _databaseName;
        }

      }

    }

    private void ConfigureConnectionManagerFromControls()
    {

      {
        _connectionManager.Properties["Name"].SetValue(_connectionManager, _connectionName);
        _connectionManager.Properties["ServerName"].SetValue(_connectionManager, _serverName);
        _connectionManager.Properties["DatabaseName"].SetValue(_connectionManager, _databaseName);
      }

    }

参照

処理手順

カスタム接続マネージャの作成
カスタム接続マネージャのコーディング

ヘルプおよび情報

SQL Server 2005 の参考資料の入手