Bagikan melalui


Mengodekan Pengelola Sambungan Kustom

Berlaku untuk: SQL Server SSIS Integration Runtime di Azure Data Factory

Setelah Anda membuat kelas yang mewarisi dari ConnectionManagerBase kelas dasar, dan menerapkan DtsConnectionAttribute atribut ke kelas , Anda harus mengambil alih implementasi properti dan metode kelas dasar untuk menyediakan fungsionalitas kustom Anda.

Untuk sampel manajer koneksi kustom, lihat Mengembangkan Antarmuka Pengguna untuk Pengelola Sambungan Kustom. Contoh kode yang diperlihatkan dalam topik ini diambil dari sampel Pengelola Sambungan Kustom SQL Server.

Catatan

Sebagian besar tugas, sumber, dan tujuan yang telah dibangun ke dalam Layanan Integrasi hanya berfungsi dengan jenis manajer koneksi bawaan tertentu. Oleh karena itu, sampel ini tidak dapat diuji dengan tugas dan komponen bawaan.

Mengonfigurasi Pengelola Sambungan

Mengatur Properti ConnectionString

Properti ConnectionString adalah properti penting dan satu-satunya properti yang unik untuk manajer koneksi kustom. Pengelola koneksi menggunakan nilai properti ini untuk menyambungkan ke sumber data eksternal. Jika Anda menggabungkan beberapa properti lain, seperti nama server dan nama database, untuk membuat string koneksi, Anda dapat menggunakan fungsi pembantu untuk merakit string dengan mengganti nilai tertentu dalam templat string koneksi dengan nilai baru yang disediakan oleh pengguna. Contoh kode berikut menunjukkan implementasi ConnectionString properti yang bergantung pada fungsi pembantu untuk merakit string.

' 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;  
  
}  

Memvalidasi Pengelola Sambungan

Anda mengambil Validate alih metode untuk memastikan bahwa manajer koneksi telah dikonfigurasi dengan benar. Minimal, Anda harus memvalidasi format string koneksi dan memastikan bahwa nilai telah disediakan untuk semua argumen. Eksekusi tidak dapat dilanjutkan sampai manajer koneksi kembali Success dari Validate metode .

Contoh kode berikut menunjukkan implementasi Validate yang memastikan bahwa pengguna telah menentukan nama server untuk koneksi.

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;  
  }  
  
}  

Mempertahankan Pengelola Sambungan

Biasanya, Anda tidak perlu menerapkan persistensi kustom untuk manajer koneksi. Persistensi kustom hanya diperlukan ketika properti objek menggunakan jenis data yang kompleks. Untuk informasi selengkapnya, lihat Mengembangkan Objek Kustom untuk Layanan Integrasi.

Bekerja dengan Sumber Data Eksternal

Metode yang mendukung menyambungkan ke sumber data eksternal adalah metode terpenting dari manajer koneksi kustom. Metode AcquireConnection dan ReleaseConnection dipanggil pada berbagai waktu selama waktu desain dan waktu proses.

Memperoleh Koneksi

Anda perlu memutuskan jenis objek apa yang sesuai untuk metode yang AcquireConnection akan dikembalikan dari manajer koneksi kustom Anda. Misalnya, manajer koneksi File hanya mengembalikan string yang berisi jalur dan nama file, sedangkan manajer koneksi ADO.NET mengembalikan objek koneksi terkelola yang sudah terbuka. Manajer koneksi OLE DB mengembalikan objek koneksi OLE DB asli yang tidak dapat digunakan dari kode terkelola. Manajer koneksi SQL Server kustom, tempat cuplikan kode dalam topik ini diambil, mengembalikan objek SqlConnection terbuka.

Pengguna manajer koneksi Anda perlu mengetahui terlebih dahulu jenis objek apa yang diharapkan, sehingga mereka dapat melemparkan objek yang dikembalikan ke jenis yang sesuai dan mengakses metode dan propertinya.

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;  
  
}  

Melepaskan Koneksi

Tindakan yang Anda ambil dalam ReleaseConnection metode tergantung pada jenis objek yang Anda kembalikan dari AcquireConnection metode . Jika ada objek koneksi terbuka, Anda harus menutupnya dan untuk merilis sumber daya apa pun yang digunakannya. Jika AcquireConnection hanya mengembalikan nilai string, tidak ada tindakan yang perlu diambil.

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();  
}  

Lihat Juga

Membuat Pengelola Sambungan Kustom
Mengembangkan Antarmuka Pengguna untuk Pengelola Sambungan Kustom