Ответ на этот вопрос зависит в некоторой степени от того, какой менеджер соединений вы используете для подключения к базе данных, однако общий подход тот же:
- Получите соответствующий диспетчер соединений в своей пользовательской задаче, используя свойство
Connections
объекта Package
.
- Вызовите метод
AcquireConnection
в диспетчере соединений, чтобы получить соединение с вашей базой данных.
- Выполните ваши операторы SQL, используя предоставленное соединение.
Этот подход позволяет использовать преимущества конфигурации и управления подключениями, предоставляемыми службами SSIS.
Для менеджера соединений ADO.NET можно использовать следующий код:
public override DTSExecResult Validate(
Connections connections, VariableDispenser variableDispenser,
IDTSComponentEvents componentEvents, IDTSLogging log)
{
// Validate connection exists.
if(!connections.Contains("YourConnection"))
{
componentEvents.FireError(0, "CustomTask",
"Invalid connection manager.", "", 0);
return DTSExecResult.Failure;
}
return DTSExecResult.Success;
}
public override DTSExecResult Execute(Connections connections,
VariableDispenser variableDispenser, IDTSComponentEvents componentEvents,
IDTSLogging log, object transaction)
{
ConnectionManager cm = connections["YourConnection"];
try
{
SqlConnection connection
= cm.AcqureConnection(transaction) as SqlConnection;
if(connection == null)
{
componentEvents.FireError(0, "CustomTask",
"Failed to acquire ADO.NET connection.", "", 0);
Return DTSExecResult.Failure;
}
// TODO: Use connection to execute SQL.
}
catch(Exception ex)
{
componentEvents.FireError(0, "CustomTask",
ex.Message, "", 0);
Return DTSExecResult.Failure;
}
}
Вам понадобится лучшая обработка ошибок, и я не уверен, как справиться с продолжительностью жизни соединения, нужно ли вам открывать его вручную или утилизировать после использования.
Удачи!