Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В службах SQL Server Integration Services обычно данные сохраняются в назначении ODBC с помощью назначения ADO.NET и поставщика данных платформа .NET Framework для ODBC. Однако можно также создать нерегламентированное назначение ODBC для использования в отдельном пакете. Для создания такого нерегламентированного назначения ODBC используется компонент скрипта, показанный в следующем примере.
Примечание.
Если нужно создать компонент, который будет полезен в нескольких задачах потока данных и нескольких пакетах, рекомендуется в качестве основы использовать этот образец компонента скрипта. Дополнительные сведения см. в разделе Разработка пользовательского компонента потока данных.
Пример
В следующем примере показано, как создать целевой компонент, использующий существующий диспетчер соединений ODBC для сохранения данных из потока данных в таблицу Microsoft SQL Server.
В этом примере представлена измененная версия пользовательского назначения ADO.NET, показанная в разделе " Создание назначения с помощью компонента скрипта". Однако в этом примере пользовательская ADO.NET назначения была изменена для работы с диспетчером соединений ODBC и сохранения данных в назначении ODBC. Были внесены, в частности, следующие изменения:
Нельзя вызывать метод
AcquireConnectionдиспетчера соединений ODBC из управляемого кода, поскольку при этом возвращается собственный объект. Поэтому в этом примере используется строка подключения диспетчера соединений для подключения к источнику данных непосредственно с помощью управляемого поставщика данных ODBC платформа .NET Framework.Команда
OdbcCommandожидает позиционированных параметров. Позиции параметров отмечаются вопросительными знаками (?) в тексте команды. (КомандаSqlCommand, напротив, ожидает именованных параметров.)
В этом примере используется таблица Person.Address из образца базы данных AdventureWorks. В примере передаются первые и четвертые столбцы, столбцы intAddressID и nvarchar(30)City , из этой таблицы через поток данных. Эти же данные используются в образцах источника, преобразования и назначения в разделе Разработка определенных типов компонента скрипта.
Настройка этого примера компонента скрипта
Создайте диспетчер подключений ODBC, который соединяется с базой данных AdventureWorks.
Создайте целевую таблицу, выполнив следующую команду Transact-SQL в базе данных AdventureWorks:
CREATE TABLE [Person].[Address2]([AddressID] [int] NOT NULL, [City] [nvarchar](30) NOT NULL)Добавьте новый компонент скрипта в область конструктора потока данных и настройте его в качестве назначения.
Подключите выходные данные вышестоящего источника или преобразования к целевому компоненту в конструкторе служб SSIS. (Вы можете подключить источник непосредственно к месту назначения без каких-либо преобразований.) Чтобы убедиться, что этот пример работает, выходные данные вышестоящего компонента должны содержать по крайней мере столбцы AddressID и City из таблицы Person.Address образца базы данных AdventureWorks.
Откройте редактор преобразования "Скрипт". На странице Входные столбцы выберите столбцы AddressID и City.
На странице Входы и выходы измените имя входа на более описательное, например ВходАдреса.
На странице Диспетчеры соединений добавьте или создайте диспетчер подключений ODBC с описательным именем, например ДиспетчерПодключенийODBC.
На странице "Скрипт" нажмите кнопку "Изменить скрипт", а затем введите скрипт, показанный ниже в
ScriptMainклассе.Закройте среду разработки скриптов и редактор преобразования "Скрипт", затем выполните образец.
Imports System.Data.Odbc ... Public Class ScriptMain Inherits UserComponent Dim odbcConn As OdbcConnection Dim odbcCmd As OdbcCommand Dim odbcParam As OdbcParameter Public Overrides Sub AcquireConnections(ByVal Transaction As Object) Dim connectionString As String connectionString = Me.Connections.MyODBCConnectionManager.ConnectionString odbcConn = New OdbcConnection(connectionString) odbcConn.Open() End Sub Public Overrides Sub PreExecute() odbcCmd = New OdbcCommand("INSERT INTO Person.Address2(AddressID, City) " & _ "VALUES(?, ?)", odbcConn) odbcParam = New OdbcParameter("@addressid", OdbcType.Int) odbcCmd.Parameters.Add(odbcParam) odbcParam = New OdbcParameter("@city", OdbcType.NVarChar, 30) odbcCmd.Parameters.Add(odbcParam) End Sub Public Overrides Sub MyAddressInput_ProcessInputRow(ByVal Row As MyAddressInputBuffer) With odbcCmd .Parameters("@addressid").Value = Row.AddressID .Parameters("@city").Value = Row.City .ExecuteNonQuery() End With End Sub Public Overrides Sub ReleaseConnections() odbcConn.Close() End Sub End Classusing System.Data.Odbc; ... public class ScriptMain : UserComponent { OdbcConnection odbcConn; OdbcCommand odbcCmd; OdbcParameter odbcParam; public override void AcquireConnections(object Transaction) { string connectionString; connectionString = this.Connections.MyODBCConnectionManager.ConnectionString; odbcConn = new OdbcConnection(connectionString); odbcConn.Open(); } public override void PreExecute() { odbcCmd = new OdbcCommand("INSERT INTO Person.Address2(AddressID, City) " + "VALUES(?, ?)", odbcConn); odbcParam = new OdbcParameter("@addressid", OdbcType.Int); odbcCmd.Parameters.Add(odbcParam); odbcParam = new OdbcParameter("@city", OdbcType.NVarChar, 30); odbcCmd.Parameters.Add(odbcParam); } public override void MyAddressInput_ProcessInputRow(MyAddressInputBuffer Row) { { odbcCmd.Parameters["@addressid"].Value = Row.AddressID; odbcCmd.Parameters["@city"].Value = Row.City; odbcCmd.ExecuteNonQuery(); } } public override void ReleaseConnections() { odbcConn.Close(); } }
Оставайтесь в курсе в службах Integration Services
Последние загрузки, статьи, примеры и видео из Корпорации Майкрософт, а также выбранные решения из сообщества, посетите страницу служб Integration Services на сайте MSDN:
Посетить страницу «Службы Integration Services» на сайте MSDN
Чтобы получать автоматические уведомления об этих обновлениях, подпишитесь на RSS-каналы, предлагаемые на этой странице.