Conectarse a orígenes de datos de una tarea personalizada
Las tareas se conectan a orígenes de datos externos para recuperar o guardar datos mediante un administrador de conexión. En tiempo de diseño, un administrador de conexión representa una conexión lógica y describe información clave como el nombre de servidor y las propiedades de autenticación. En tiempo de ejecución, las tareas llaman al método AcquireConnection del administrador de conexión para establecer la conexión física al origen de datos.
Dado que un paquete puede contener muchas tareas, cada una de los cuales pueden tener conexiones a orígenes de datos distintos, el paquete realiza el seguimiento de todos los administradores de conexión de una colección, la colección Connections. Las tareas utilizan la colección del paquete para buscar el administrador de conexión que utilizarán durante la validación y ejecución. La colección Connections es el primer parámetro de los métodos Execute y Validate.
Puede impedir que la tarea use el administrador de conexión incorrecto mostrando los objetos ConnectionManager de la colección al usuario, mediante un cuadro de diálogo o una lista desplegable de la interfaz gráfica de usuario. Esto proporciona al usuario una manera de seleccionar entre únicamente los objetos ConnectionManager del tipo adecuado contenidos en el paquete.
Las tareas llaman al método AcquireConnection para establecer la conexión física al origen de datos. El método devuelve el objeto de conexión subyacente que la tarea puede usar a continuación. Dado que el administrador de conexión aísla los detalles de la implementación del objeto de conexión subyacente de la tarea, la tarea sólo tiene que llamar al método AcquireConnection para establecer la conexión y no tiene que preocuparse de otros aspectos de la conexión.
Ejemplo
En el código de ejemplo siguiente se muestra la validación del nombre ConnectionManager en los métodos Valide y Execute, y se muestra cómo utilizar el método AcquireConnection para establecer la conexión física en el método Execute.
private string connectionManagerName = "";
public string ConnectionManagerName
{
get { return this.connectionManagerName; }
set { this.connectionManagerName = value; }
}
public override DTSExecResult Validate(
Connections connections, VariableDispenser variableDispenser,
IDTSComponentEvents componentEvents, IDTSLogging log)
{
// If the connection manager exists, validation is successful;
// otherwise, fail validation.
try
{
ConnectionManager cm = connections[this.connectionManagerName];
return DTSExecResult.Success;
}
catch (System.Exception e)
{
componentEvents.FireError(0, "SampleTask", "Invalid connection manager.", "", 0);
return DTSExecResult.Failure;
}
}
public override DTSExecResult Execute(Connections connections,
VariableDispenser variableDispenser, IDTSComponentEvents componentEvents,
IDTSLogging log, object transaction)
{
try
{
ConnectionManager cm = connections[this.connectionManagerName];
object connection = cm.AcquireConnection(transaction);
return DTSExecResult.Success;
}
catch (System.Exception exception)
{
componentEvents.FireError(0, "SampleTask", exception.Message, "", 0);
return DTSExecResult.Failure;
}
}
Private _connectionManagerName As String = ""
Public Property ConnectionManagerName() As String
Get
Return Me._connectionManagerName
End Get
Set(ByVal Value As String)
Me._connectionManagerName = value
End Set
End Property
Public Overrides Function Validate( _
ByVal connections As Microsoft.SqlServer.Dts.Runtime.Connections, _
ByVal variableDispenser As Microsoft.SqlServer.Dts.Runtime.VariableDispenser, _
ByVal componentEvents As Microsoft.SqlServer.Dts.Runtime.IDTSComponentEvents, _
ByVal log As Microsoft.SqlServer.Dts.Runtime.IDTSLogging) _
As Microsoft.SqlServer.Dts.Runtime.DTSExecResult
' If the connection manager exists, validation is successful;
' otherwise fail validation.
Try
Dim cm As ConnectionManager = connections(Me._connectionManagerName)
Return DTSExecResult.Success
Catch e As System.Exception
componentEvents.FireError(0, "SampleTask", "Invalid connection manager.", "", 0)
Return DTSExecResult.Failure
End Try
End Function
Public Overrides Function Execute( _
ByVal connections As Microsoft.SqlServer.Dts.Runtime.Connections, _
ByVal variableDispenser As Microsoft.SqlServer.Dts.Runtime.VariableDispenser, _
ByVal componentEvents As Microsoft.SqlServer.Dts.Runtime.IDTSComponentEvents, _
ByVal log As Microsoft.SqlServer.Dts.Runtime.IDTSLogging, ByVal transaction As Object) _
As Microsoft.SqlServer.Dts.Runtime.DTSExecResult
Try
Dim cm As ConnectionManager = connections(Me._connectionManagerName)
Dim connection As Object = cm.AcquireConnection(transaction)
Return DTSExecResult.Success
Catch exception As System.Exception
componentEvents.FireError(0, "SampleTask", exception.Message, "", 0)
Return DTSExecResult.Failure
End Try
End Function
|