Подключитесь к базе данных SQL внутри задачи сценария в SSIS

Внутри задачи сценария в SSIS мне нужно сделать вызов базы данных SQL. У меня есть строка подключения, которая была создана, когда я добавил базу данных в папку источников данных, однако теперь я не уверен, как ссылаться на нее внутри кода С#. Я знаю, как это сделать в коде веб-сайта ASP, однако кажется, что у SSIS должен быть более прямой метод.

РЕДАКТИРОВАТЬ

Эта строка кода на самом деле вызывает исключение:

sqlConn = (System.Data.SqlClient.SqlConnection)cm.AcquireConnection(Dts.Transaction);

Он гласит: «Невозможно преобразовать COM-объект типа« System._ComObject »в тип класса« System.Data.SqlClient.SqlConection »».


person NealR    schedule 08.08.2012    source источник


Ответы (2)


вы не можете использовать конфигурации из диспетчера соединений из задачи сценария, например: conectionManager1.exceuteSQLStatment(...)

как только вы находитесь «внутри» задачи сценария, вам нужно получить доступ к CM как к переменной:

ConnectionManager cm;
System.Data.SqlClient.SqlConnection sqlConn;
System.Data.SqlClient.SqlCommand sqlComm;

cm = Dts.Connections["conectionManager1"];

sqlConn = (System.Data.SqlClient.SqlConnection)cm.AcquireConnection(Dts.Transaction);
sqlComm = new System.Data.SqlClient.SqlCommand("your SQL Command", sqlConn);
sqlComm.ExecuteNonQuery();

cm.ReleaseConnection(sqlConn);
person Diego    schedule 08.08.2012
comment
Если бы я хотел получить значение (в моем случае я пытаюсь получить DateTime) из sqlComm, я бы просто использовал что-то вроде: DbDataReader reader = sqlComm.ExecuteReader() - а затем прокручивать все, что выходит? - person NealR; 08.08.2012
comment
Изменив подключение к базе данных с OLEDB на ADO.Net, код, указанный выше, у меня сработал. - person Tequila; 28.06.2013
comment
@Текила. Вам нужно будет использовать объекты Oledb для подключения с использованием соединения Oledb, например..System.Data.OleDbOleDbConnection и OleDbCommand... - person Martin MacPherson; 11.10.2013
comment
@Diego - Ты заслужил золотую медаль за этот пост. Это сэкономило мне массу времени. Кстати, где я могу получить информацию о таких вещах? Упоминалось ли это в какой-то документации MS? - person Steam; 18.11.2013
comment
@Текила - это правильно. Это именно то, что нужно. Похоже, OLEDB здесь не подойдет. - person Steam; 19.11.2013
comment
Откуда вы получаете Dts.Transaction? Кажется, это недоступно в моем проекте @Diego. - person M Akin; 18.12.2014
comment
Обратите внимание, что это не будет работать с OLEDB, согласно Microsoft Docs, и все это задокументировано здесь: docs.microsoft.com/en-us/sql/integration-services/ - person sorrell; 12.01.2018
comment
@MartinMacPherson - попытка преобразовать rawConnection (после AcquireConnection) в OleDbConnection вызывает исключение. Вы пробовали это и работает ли это в этом контексте? Ваш комментарий кажется неправильным. - person Don Cheadle; 27.09.2019
comment
Я подключаюсь к ASE (Adaptive Server Enterprise) с помощью ado.net, но использую odbc, поскольку драйвер ado.net не отображается в мастере подключения SSIS. Одна вещь, которую я узнал, заключалась в том, чтобы убедиться, что вы используете точное имя соединения (включая пробелы), иначе ваш диспетчер соединений не будет найден в вашей задаче сценария. - person Mark Libner; 24.08.2020

Вы должны проверить privider соединения, которое вы пытаетесь создать.

Вы не можете преобразовать соединение OleDb.OleDbConnection в SQLClient.SQLConnection, параметры другие.

person Hugo Vares    schedule 01.12.2019