Хорошо, поэтому я сделал эту демонстрацию, чтобы представить проблемы, с которыми я столкнулся в своем проекте.
Прежде всего, у меня есть пустая таблица в локальной базе данных, которая выглядит следующим образом:
* Обратите внимание на тип данных date столбца A.
Далее я создаю пакет с менеджером соединений программно через Visual Basic с использованием Microsoft.SqlServer.Dts.Runtime
:
Imports Microsoft.SqlServer.Dts.Runtime
Module Module2
Sub Main()
Dim app As Application = New Application()
Dim package As Package = New Package()
Dim connectionManager As ConnectionManager = package.Connections.Add("OLEDB")
connectionManager.Properties("Description").SetValue(connectionManager, "DESCRIPTION")
connectionManager.Properties("Name").SetValue(connectionManager, "Test")
Dim Provider As String = "SQLOLEDB"
Dim ServerName As String = "DESKTOP-UPN5DLT"
Dim DatabaseName As String = "Test"
connectionManager.ConnectionString = "Data Source=" &
ServerName & ";Initial Catalog=" &
DatabaseName & ";Provider=" & Provider & ";Integrated Security=SSPI;"
app.SaveToXml("C:\Users\zafir\Desktop\Package_3.dtsx", package, Nothing)
End Sub
End Module
Затем я открываю пакет .dtsx в инструментах данных и добавляю поток данных с одним компонентом назначения OLE DB.
Когда я связываю компонент с сгенерированным диспетчером соединений, тип данных для столбца A не распознается, и для него устанавливается значение по умолчанию DT_WSTR размера 10.
Все остальные типы данных (в данном случае: datetime & int) распознаны правильно.
Теперь, если я удалю менеджер соединений ole db и добавлю его вручную, это будет работать как шарм.
У меня есть следующие характеристики:
- SQL Server 2016
- Инструменты данных 2015
- DTSRuntimeWrap.dll 12.0.0.0
Как мне решить эту проблему?Это, очевидно, проблема с библиотекой.