В моем пакете SSIS я создал диспетчер соединений ADO, поэтому у меня есть MyAdoManager.conmgr
с базовым соединением с именем MyServerName.MyDbName
.
Теперь я пытаюсь использовать его Script Task
так, как это описано в некоторых руководствах.
ConnectionManager cm;
System.Data.SqlClient.SqlConnection sqlConn;
System.Data.SqlClient.SqlCommand sqlComm;
cm = Dts.Connections["MyAdoManager.conmgr"]; // also tried "MyServerName.MyDbName"
sqlConn = (System.Data.SqlClient.SqlConnection)cm.AcquireConnection(Dts.Transaction);
sqlComm = new System.Data.SqlClient.SqlCommand("SELECT * FROM MyTable", sqlConn);
sqlComm.ExecuteNonQuery();
cm.ReleaseConnection(sqlConn);
Проблема
После выполнения пакета я всегда получаю исключение «Соединение не найдено». Как получить доступ к соединению, используемому существующим диспетчером соединений?
Какое имя соединения я должен использовать здесь cm = Dts.Connections["..."]
?
Кроме того, я видел несколько предложений о том, что мне нужен диспетчер соединений с полем сценария, но у меня нет никаких настроек, связанных с соединением, в редакторе сценариев в моем SSIS.
Вроде решено. Недокументированная функция. Задача сценария может получить доступ к соединению в диспетчере соединений, только если они имеют одинаковое имя.
Как только я переименовал диспетчер соединений с MyAdoManager.conmgr
обратно на MyServerName.MyDbName.conmgr
, и он совпал с именем соединения MyServerName.MyDbName
, я смог использовать его в задаче сценария.