Я новичок на этом форуме, и это моя первая тема, поэтому я надеюсь, что размещаю ее в правильном месте.
Я не знаю никакого С#, но я немного знаю VB, я перенес свой пакет DTS в SSIS, но я не могу заставить работать сценарий ActiveX и решил переписать его в задаче сценария. У меня есть 4 глобальные переменные, и все они имеют значения, уже установленные в меню глобальных переменных. ссылка на картинку: Ссылка. Там есть код ActiveX, поэтому пользователь может просто изменить 2 vars при переключении сервера/базы данных, и он по-прежнему будет делать то же самое для таблиц (все таблицы должны иметь одно и то же имя на всех серверах и базах данных, поэтому нет необходимости корректироваться) и автоматически запускается ежедневно. Это исходный код ActiveX:
Function Main()
Dim sEnvironm
Dim sServer
Dim sSourceFile
Dim sSourcePath
Dim sBackupPath
Dim sErrorPath
Dim sFileName
Dim sUDLPath
'*********************************************************
' Set vars
'
' First 2 are depending on the server and db
' FILL IN THE RIGHT VALUES
'
'*********************************************************
sEnvironm = "MON_Datamart"
sServer = "W0254"
' --- DO NOT CHANGE ANYTHING BELOW THIS LINE ---
' ---
sSourceFile = "\\" & sServer & "\Data_sql\" & sEnvironm & "\DTS\SourceFiles\tbl_L47T1.txt"
sSourcePath = "\\" & sServer & "\Data_sql\" & sEnvironm & "\DTS\SourceFiles\"
sBackupPath = "\\" & sServer & "\Data_sql\" & sEnvironm & "\DTS\BackupFiles\"
sErrorPath = "\\" & sServer & "\Data_sql\" & sEnvironm & "\DTS\ErrorFiles\"
sFileName = "tbl_L47T1.txt"
sUDLPath = "\\" & sServer & "\Data_sql\" & sEnvironm & "\UDL\" & sEnvironm & ".udl"
FoundError = False
Set oPackage = DTSGlobalVariables.Parent
Set oConnection = oPackage.Connections("tbl_L47T1.txt")
oConnection.DataSource = sSourceFile
Set oConnection = oPackage.Connections("Datamart")
oConnection.UDLPath = sUDLPath
Set oConnection = oPackage.Connections("Truncate")
oConnection.UDLPath = sUDLPath
Set oTask = oPackage.Tasks("DTSTask_DTSDataPumpTask_1").CustomTask
oTask.SourceObjectName = sSourceFile
oTask.DestinationObjectName = sEnvironm & ".dbo.stg_tbl_L47T1"
DTSGlobalVariables("SourcePath").Value = sSourceFile
DTSGlobalVariables("BackupPath").Value = sBackupPath
DTSGlobalVariables("ErrorPath").Value = sErrorPath
DTSGlobalVariables("FileName").Value = sFileName
Set oTask = Nothing
Set oConnection = Nothing
Set oPackage = Nothing
Main = DTSTaskExecResult_Success
End Function
И это то, что у меня есть до сих пор:
Public Sub Main()
Dim sEnvironm As String
Dim sServer As String
Dim sSourceFile As String
Dim sSourcePath As String
Dim sBackupPath As String
Dim sErrorPath As String
Dim sFileName As String
Dim sUDLPath As String
Dim FoundError As Boolean
Dim oPackage As Object
Dim oConnection As Object
Dim oTask As Object
Dim DTSGlobalVariables As Object
'*********************************************************
' Set vars
'
' First 2 are depending on the server and db
' FILL IN THE RIGHT VALUES
'
'*********************************************************
sEnvironm = "MON_Datamart"
sServer = "W0254"
' --- DO NOT CHANGE ANYTHING BELOW THIS LINE ---
' ---
sSourceFile = "\\" & sServer & "\Data_sql\" & sEnvironm & "\DTS\SourceFiles\tbl_L47T1.txt"
sSourcePath = "\\" & sServer & "\Data_sql\" & sEnvironm & "\DTS\SourceFiles\"
sBackupPath = "\\" & sServer & "\Data_sql\" & sEnvironm & "\DTS\BackupFiles\"
sErrorPath = "\\" & sServer & "\Data_sql\" & sEnvironm & "\DTS\ErrorFiles\"
sFileName = "tbl_L47T1.txt"
sUDLPath = "\\" & sServer & "\Data_sql\" & sEnvironm & "\UDL\" & sEnvironm & ".udl"
FoundError = False
oPackage = Dts.Variables("User::VariableName").Value
oConnection = oPackage.Connections("tbl_L47T1.txt")
oConnection.DataSource = sSourceFile
oConnection = oPackage.Connections("Datamart")
oConnection.UDLPath = sUDLPath
oConnection = oPackage.Connections("Truncate")
oConnection.UDLPath = sUDLPath
oTask = oPackage.Tasks("DTSTask_DTSDataPumpTask_1").CustomTask
oTask.SourceObjectName = sSourceFile
oTask.DestinationObjectName = sEnvironm & ".dbo.stg_tbl_L47T1"
DTSGlobalVariables("SourcePath").Value = sSourceFile
DTSGlobalVariables("BackupPath").Value = sBackupPath
DTSGlobalVariables("ErrorPath").Value = sErrorPath
DTSGlobalVariables("FileName").Value = sFileName
oTask = Nothing
oConnection = Nothing
oPackage = Nothing
Main = DTSTaskExecResult_Success
End Sub
Если я отлаживаю это, я получаю много ошибок, и я понятия не имею, как их исправить...
ошибка:
Error: System.Reflection.TargetInvocationException: Het doel van een aanroep heeft een uitzondering veroorzaakt. ---> Microsoft.SqlServer.Dts.Runtime.DtsRuntimeException: The element cannot be found in a collection. This error happens when you try to retrieve an element from a collection on a container during execution of the package and the element is not there.
---> System.Runtime.InteropServices.COMException (0xC0010009): The element cannot be found in a collection. This error happens when you try to retrieve an element from a collection on a container during execution of the package and the element is not there.
bij Microsoft.SqlServer.Dts.Runtime.Wrapper.IDTSVariables100.get_Item(Object Index)
bij Microsoft.SqlServer.Dts.Runtime.Variables.get_Item(Object index)
--- Einde van intern uitzonderingsstackpad ---
bij Microsoft.SqlServer.Dts.Runtime.Variables.get_Item(Object index)
bij ST_f32fc12b60f34bebbbdfc0c5e5b40a96.vbproj.ScriptMain.Main()
--- Einde van intern uitzonderingsstackpad ---
bij System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
bij System.RuntimeMethodHandle.InvokeMethodFast(Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
bij System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
bij System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
bij System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams)
bij System.Type.InvokeMember(String name, BindingFlags invokeAttr, Binder binder, Object target, Object[] args, CultureInfo culture)
bij Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTATaskScriptingEngine.ExecuteScript()
Может ли кто-нибудь помочь мне преобразовать это дальше? Я застрял и не знаю, как исправить свои ошибки...
Заранее спасибо!
- Майкл