Каков предпочтительный способ выполнения SQL в пользовательской задаче SSIS? - PullRequest
3 голосов
/ 18 сентября 2009

Я пишу пользовательскую задачу SSIS, которая, как одна из ее функций, должна выполнять хранимую процедуру для соединения с базой данных. Я не могу найти информацию о том, как это делается.

Я использую ADO.NET Connection Manager для подключения к базе данных и хочу написать свою задачу на C #.

Каков предпочтительный способ выполнения SQL в пользовательской задаче SSIS?

1 Ответ

5 голосов
/ 18 сентября 2009

Ответ на этот вопрос зависит в некоторой степени от того, какой менеджер соединений вы используете для подключения к базе данных, однако общий подход тот же:

  1. Получите соответствующий диспетчер соединений в своей пользовательской задаче, используя свойство Connections объекта Package.
  2. Вызовите метод AcquireConnection в диспетчере соединений, чтобы получить соединение с вашей базой данных.
  3. Выполните ваши операторы 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;
    }
}

Вам понадобится лучшая обработка ошибок, и я не уверен, как справиться с продолжительностью жизни соединения, нужно ли вам открывать его вручную или утилизировать после использования.

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...