Подключение компонента сценария SSIS

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

public override void AcquireConnections(object Transaction)
{
    connMgr = base.Connections.Connection;
    conn =  (SqlConnection)connMgr.AcquireConnection(null);
}

Я получаю исключение здесь.

System.InvalidCastException: Unable to cast COM object of type 'System.__ComObject' to class type 'System.Data.SqlClient.SqlConnection'. Instances of types that represent COM components cannot be cast to types that do not represent COM components; however they can be cast to interfaces as long as the underlying COM component supports QueryInterface calls for the IID of the interface.

Любые решения?


person Milo Cabs    schedule 27.11.2012    source источник


Ответы (2)


Для тех, кто хочет сделать это в компоненте скрипта:

  1. Дважды щелкните компонент «Сценарий», чтобы открыть «Редактор преобразования сценария».
  2. Щелкните элемент списка «Диспетчеры соединений».
  3. Добавьте новый диспетчер соединений. Выберите существующий диспетчер соединений ADO.NET.
  4. Щелкните элемент списка «Сценарий», а затем кнопку «Редактировать сценарий...».

Вы можете сделать что-то подобное внутри своего скрипта:

using (SqlConnection connection = this.Connections.Connection.AcquireConnection(null) as SqlConnection)
{
    using (SqlCommand command = connection.CreateCommand())
    {
        command.CommandText = "SELECT [Value] FROM dbo.MyTable";
        command.CommandType = CommandType.Text;

        using (SqlDataReader reader = command.ExecuteReader())
        {
            while (reader.Read())
            {
                ProfanityWords.Add(reader.GetValue(0).ToString());
            }
        }
    }

    this.Connections.Connection.ReleaseConnection(connection);
}

введите здесь описание изображения

person Garry English    schedule 27.10.2014

Необходимо создать диспетчер соединений ADO.NET и обратиться к коду для приведения типа к SqlConnection. Если у вас нет подключения ADO.NET в пакете SSIS, вы получите исключение TypeCast. Следующие шаги следует использовать, если вы хотите использовать SqlConnection.

  1. Создайте соединение ADO.NET.
  2. Используйте следующую строку в своем коде.

    var connObj = Dts.Connections["ADO.NETConnectionName"].AcquireConnection(null);
    
    var sqlConn = (SqlConnection)connObj;
    
  3. Как только вы закончите с вашим SQL-соединением. Используйте следующий код, чтобы закрыть/освободить соединение.

    Dts.Connections["ADO.NETConnectionName"].ReleaseConnection(connObj);
    

Надеюсь это поможет.

person Gowdhaman008    schedule 27.11.2012
comment
Спасибо за ответ, но моя главная проблема в том, что я не вижу объект Dts в классе. Даже если я включу .dts в ссылки. - person Milo Cabs; 13.12.2012
comment
Ответ не относится к Компоненту сценария, для которого задан вопрос. Скорее речь идет о немного другой задаче сценария. - person Maxim V. Pavlov; 24.07.2013
comment
Чтобы уточнить комментарий @MaximV.Pavlov - вопрос связан со скриптом component (который существует в задаче Dataflow), тогда как этот ответ относится к скрипту task ( который существует в потоке управления). - person Sepster; 29.07.2015