I have the following code inside a Script task:
Imports System
Imports System.Data
Imports System.Math
Imports Microsoft.SqlServer.Dts.Runtime
Imports System.Collections
Public Class ScriptMain
Public Sub Main()
Dim nm As String = "ship_metrics_rpt_*.csv"
Dim files As ObjectModel.ReadOnlyCollection(Of String) = My.Computer.FileSystem. _
GetFiles(CStr(Dts.Variables("MainPath").Value))
If files.Count > 0 Then
Dim dic As Generic.SortedDictionary(Of Date, String)
For a As Integer = 1 To files.Count
If files(a) Like nm Then
Dim nfo As System.IO.FileInfo = My.Computer.FileSystem.GetFileInfo(files(a))
dic.Add(nfo.CreationTime, files(a))
End If
Next
If dic.Count > 0 Then
Dim FinalFiles(dic.Count - 1) As String
Dim count As Integer
For Each kvp As Generic.KeyValuePair(Of Date, String) In dic
FinalFiles(count) = kvp.Value
Next
End If
End If
Dts.TaskResult = Dts.Results.Success
End Sub
The following exception gets thrown at "If files.Count > 0 Then"
"Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index"
Why?
Thanks for your help
Has MainPath been passed in as a variable? It is scoped properly?|||
Yes it's been passed. You can insert "msgbox files.count" before "if files.count > 0" and get a count just fine. I don't understand it.
|||There are a number of problems here (easily fixed though)1 . Fence post condition. The ReadOnlyCollection index starts at 0, not 1.
Change
For a As Integer = 1 To files.Count
To
For a As Integer = 0 To files.Count -1
2. Unitialized Variable:
Change
Dim dic As Generic.SortedDictionary(Of Date, String)
To
Dim dic As Generic.SortedDictionary(Of Date, String) = New Generic.SortedDictionary(Of Date, String)
No comments:
Post a Comment