Quantcast
Channel: SQLServerCentral » SQL Server 2014 » Development - SQL Server 2014 » Latest topics
Viewing all articles
Browse latest Browse all 3145

How to fix ColumnIsNullException error in Script transform in SSIS 2014

$
0
0
Hello all. I encountered the following error after migrating the ssis packages from SQl 2005 to SQL 2014. It seems to work fine in 2005 but failed in 2014. It is a custom script transformation inside a data flow task. NOT a script task.Error: Microsoft.SqlServer.Dts.Pipeline.ColumnIsNullException: The column has a null value. at Microsoft.SqlServer.Dts.Pipeline.ScriptComponentHost.HandleUserException(Exception e) at Microsoft.SqlServer.Dts.Pipeline.ScriptComponentHost.ProcessInput(Int32 inputID, PipelineBuffer buffer) at Microsoft.SqlServer.Dts.Pipeline.ManagedComponentHost.HostProcessInput(IDTSManagedComponentWrapper100 wrapper, Int32 inputID, IDTSBuffer100 pDTSBuffer, IntPtr bufferWirePacket)My code is below. Please note that in the pattern " + Row.XXXX.ToString() + " in the below code, the XXXX is the input column name from Input0.[u]Scriptmain.vb[/u]Imports SystemImports System.DataImports System.MathImports Microsoft.SqlServer.Dts.RuntimeImports Microsoft.SqlServer.Dts.Pipeline.WrapperImports Microsoft.SqlServer.Dts.Runtime.WrapperImports System.Data.OleDbImports System.Data.SqlClientImports System.Xml<Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute> _<CLSCompliant(False)> _Public Class ScriptMain Inherits UserComponent ' The execution engine calls this method when the task executes. ' To access the object model, use the Dts object. Connections, variables, events, ' and logging features are available as static members of the Dts class. ' Before returning from this method, set the value of Dts.TaskResult to indicate success or failure. ' ' To open Code and Text Editor Help, press F1. ' To open Object Browser, press Ctrl+Alt+J. Dim oleDA As New OleDbDataAdapter Dim command As New OleDbCommand Dim dt As New DataTable Dim dtrow() As DataRow Dim col As DataColumn Dim UnknownTimeKey As Int32 Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer) '================================================================================================= ' if your source fact table ALREADY HAS key field(s) defined and contain nulls, you need to ' map each field to it's corresponding backfill value like such - NOTE: you will first need to ' select the appropriate input column(s) in the 'INPUTS' section (with ReadWrite access) before they ' will appear in this script. '================================================================================================= 'If Row.ATMChxODCvrgElctnDtTimeKey_IsNull Then ' dtrow = dt.Select("FldName = 'ATM_Chx_OD_Cvrg_Elctn_Dt_Time_Key'") ' If dtrow.GetUpperBound(0) = 0 Then ' Row.ATMChxODCvrgElctnDtTimeKey = CInt(dtrow(0)(1)) ' Else ' 'future release - need to code meaningful error messages to Audit, abort pkg ' End If 'End If '================================================================================================= ' if you are adding new key field(s) to a fact table in prod (but not yet IN prod), this ' section will add your new key fields to the dataflow, populated with the key values you specified ' in your New_Dim_Key_Flds.txt file. NOTE - you must add your new columns to 'Inputs and Outputs' ' - Output0 before you will be able to update this script to reference your fields. '================================================================================================= dtrow = dt.Select("Full_Dt = '" + Row.BaslGuarRatingDt.ToString() + "'") If dtrow.GetUpperBound(0) = 0 Then Row.BaslGuarRatingTimeKey = CInt(dtrow(0)(0)) Else Row.BaslGuarRatingTimeKey = UnknownTimeKey End If dtrow = dt.Select("Full_Dt = '" + Row.CODt.ToString() + "'") If dtrow.GetUpperBound(0) = 0 Then Row.COTimeKey = CInt(dtrow(0)(0)) Else Row.COTimeKey = UnknownTimeKey End If dtrow = dt.Select("Full_Dt = '" + Row.EffectiveDt.ToString() + "'") If dtrow.GetUpperBound(0) = 0 Then Row.EffectiveTimeKey = CInt(dtrow(0)(0)) Else Row.EffectiveTimeKey = UnknownTimeKey End If dtrow = dt.Select("Full_Dt = '" + Row.RiskRatingDt.ToString() + "'") If dtrow.GetUpperBound(0) = 0 Then Row.RiskRatingTimekey = CInt(dtrow(0)(0)) Else Row.RiskRatingTimekey = UnknownTimeKey End If dtrow = dt.Select("Full_Dt = '" + Row.LastRenewDt.ToString() + "'") If dtrow.GetUpperBound(0) = 0 Then Row.LastRenewTimeKey = CInt(dtrow(0)(0)) Else Row.LastRenewTimeKey = UnknownTimeKey End If dtrow = dt.Select("Full_Dt = '" + Row.LegalMaturDt.ToString() + "'") If dtrow.GetUpperBound(0) = 0 Then Row.LegalMaturTimeKey = CInt(dtrow(0)(0)) Else Row.LegalMaturTimeKey = UnknownTimeKey End If dtrow = dt.Select("Full_Dt = '" + Row.NextDueDt.ToString() + "'") If dtrow.GetUpperBound(0) = 0 Then Row.NextDueTimeKey = CInt(dtrow(0)(0)) Else Row.NextDueTimeKey = UnknownTimeKey End If dtrow = dt.Select("Full_Dt = '" + Row.NextReprcDt.ToString() + "'") If dtrow.GetUpperBound(0) = 0 Then Row.NextReprcTimeKey = CInt(dtrow(0)(0)) Else Row.NextReprcTimeKey = UnknownTimeKey End If dtrow = dt.Select("Full_Dt = '" + Row.ObgtnEffDt.ToString() + "'") If dtrow.GetUpperBound(0) = 0 Then Row.ObgtnEffTimeKey = CInt(dtrow(0)(0)) Else Row.ObgtnEffTimeKey = UnknownTimeKey End If dtrow = dt.Select("Full_Dt = '" + Row.ObgtnOrigDt.ToString() + "'") If dtrow.GetUpperBound(0) = 0 Then Row.ObgtnOrigTimeKey = CInt(dtrow(0)(0)) Else Row.ObgtnOrigTimeKey = UnknownTimeKey End If dtrow = dt.Select("Full_Dt = '" + Row.ObgtnPostDt.ToString() + "'") If dtrow.GetUpperBound(0) = 0 Then Row.ObgtnPostTimeKey = CInt(dtrow(0)(0)) Else Row.ObgtnPostTimeKey = UnknownTimeKey End If dtrow = dt.Select("Full_Dt = '" + Row.OrigMaturDt.ToString() + "'") If dtrow.GetUpperBound(0) = 0 Then Row.OrigMaturTimeKey = CInt(dtrow(0)(0)) Else Row.OrigMaturTimeKey = UnknownTimeKey End If dtrow = dt.Select("Full_Dt = '" + Row.PastDueDt.ToString() + "'") If dtrow.GetUpperBound(0) = 0 Then Row.PastDueTimeKey = CInt(dtrow(0)(0)) Else Row.PastDueTimeKey = UnknownTimeKey End If dtrow = dt.Select("Full_Dt = '" + Row.PrincPaidToDt.ToString() + "'") If dtrow.GetUpperBound(0) = 0 Then Row.PrincPaidToTimeKey = CInt(dtrow(0)(0)) Else Row.PrincPaidToTimeKey = UnknownTimeKey End If dtrow = dt.Select("Full_Dt = '" + Row.PrincPrevDt.ToString() + "'") If dtrow.GetUpperBound(0) = 0 Then Row.PrincPrevTimekey = CInt(dtrow(0)(0)) Else Row.PrincPrevTimekey = UnknownTimeKey End If dtrow = dt.Select("Full_Dt = '" + Row.REAMNextSchedDt.ToString() + "'") If dtrow.GetUpperBound(0) = 0 Then Row.REAMNextSchedTimeKey = CInt(dtrow(0)(0)) Else Row.REAMNextSchedTimeKey = UnknownTimeKey End If dtrow = dt.Select("Full_Dt = '" + Row.REAMPeriodDt.ToString() + "'") If dtrow.GetUpperBound(0) = 0 Then Row.REAMPeriodTimeKey = CInt(dtrow(0)(0)) Else Row.REAMPeriodTimeKey = UnknownTimeKey End If dtrow = dt.Select("Full_Dt = '" + Row.StatChngDt.ToString() + "'") If dtrow.GetUpperBound(0) = 0 Then Row.StatChngTimeKey = CInt(dtrow(0)(0)) Else Row.StatChngTimeKey = UnknownTimeKey End If dtrow = dt.Select("Full_Dt = '" + Row.RenewPostDt.ToString() + "'") If dtrow.GetUpperBound(0) = 0 Then Row.RenewPostTimeKey = CInt(dtrow(0)(0)) Else Row.RenewPostTimeKey = UnknownTimeKey End If dtrow = dt.Select("Full_Dt = '" + Row.CloseDt.ToString() + "'") If dtrow.GetUpperBound(0) = 0 Then Row.CloseTimeKey = CInt(dtrow(0)(0)) Else Row.CloseTimeKey = UnknownTimeKey End If End Sub Public Overrides Sub PreExecute() MyBase.PreExecute() oleDA.Fill(dt, Me.Variables.DimTimeKeys) 'capture the unknown key dtrow = dt.Select("Date_Desc = 'Unknown'") If dtrow.GetUpperBound(0) = 0 Then UnknownTimeKey = CInt(dtrow(0)(0)) End If ' // create a SqlCommand object for this connection ' OleDbCommand command = conn.CreateCommand(); ' command.CommandText = "SELECT time_key, Date_Desc, Full_Dt, Full_Dt as Key_Date FROM VaultConformed.conformed.Tbl_Dim_Time"; ' command.CommandType = CommandType.Text; ' sqlAdapter = new OleDbDataAdapter(); ' //set the SelectCommand of the adapter ' sqlAdapter.SelectCommand = command; ' // create a new DataTable ' DimTimeTable = new DataTable(); ' //fill the DataTable ' int timerows = sqlAdapter.Fill(DimTimeTable); End SubEnd Class---------------------------------------------------BufferWrapper.vbOption Strict Off ' This allows usage of PipelineBuffer typed accessors.Imports SystemImports System.DataImports Microsoft.SqlServer.Dts.PipelineImports Microsoft.SqlServer.Dts.Pipeline.Wrapper<CLSCompliant(False)> _Public Class Input0Buffer Inherits ScriptBuffer Public Sub New(ByVal Buffer As PipelineBuffer, ByVal BufferColumnIndexes As Integer(), ByVal OutputMap As OutputNameMap) MyBase.New(Buffer, BufferColumnIndexes, OutputMap) End Sub Public Property [BaslGuarRatingTimeKey]() As Int32 Get Return Buffer.GetInt32(Me.BufferColumnIndexes(0)) End Get Set Me(0) = Value End Set End Property Public Property [BaslGuarRatingTimeKey_IsNull] As Boolean Get Return IsNull(0) End Get Set If (value) SetNull(0) Else Throw new InvalidOperationException("IsNull property cannot be set to False. Assign a value to the column instead.") End If End Set End Property Public Property [COTimeKey]() As Int32 Get Return Buffer.GetInt32(Me.BufferColumnIndexes(1)) End Get Set Me(1) = Value End Set End Property Public Property [COTimeKey_IsNull] As Boolean Get Return IsNull(1) End Get Set If (value) SetNull(1) Else Throw new InvalidOperationException("IsNull property cannot be set to False. Assign a value to the column instead.") End If End Set End Property Public Property [EffectiveTimeKey]() As Int32 Get Return Buffer.GetInt32(Me.BufferColumnIndexes(2)) End Get Set Me(2) = Value End Set End Property Public Property [EffectiveTimeKey_IsNull] As Boolean Get Return IsNull(2) End Get Set If (value) SetNull(2) Else Throw new InvalidOperationException("IsNull property cannot be set to False. Assign a value to the column instead.") End If End Set End Property Public Property [RiskRatingTimekey]() As Int32 Get Return Buffer.GetInt32(Me.BufferColumnIndexes(3)) End Get Set Me(3) = Value End Set End Property Public Property [RiskRatingTimekey_IsNull] As Boolean Get Return IsNull(3) End Get Set If (value) SetNull(3) Else Throw new InvalidOperationException("IsNull property cannot be set to False. Assign a value to the column instead.") End If End Set End Property Public Property [LastRenewTimeKey]() As Int32 Get Return Buffer.GetInt32(Me.BufferColumnIndexes(4)) End Get Set Me(4) = Value End Set End Property Public Property [LastRenewTimeKey_IsNull] As Boolean Get Return IsNull(4) End Get Set If (value) SetNull(4) Else Throw new InvalidOperationException("IsNull property cannot be set to False. Assign a value to the column instead.") End If End Set End Property Public Property [LegalMaturTimeKey]() As Int32 Get Return Buffer.GetInt32(Me.BufferColumnIndexes(5)) End Get Set Me(5) = Value End Set End Property Public Property [LegalMaturTimeKey_IsNull] As Boolean Get Return IsNull(5) End Get Set If (value) SetNull(5) Else Throw new InvalidOperationException("IsNull property cannot be set to False. Assign a value to the column instead.") End If End Set End Property Public Property [NextDueTimeKey]() As Int32 Get Return Buffer.GetInt32(Me.BufferColumnIndexes(6)) End Get Set Me(6) = Value End Set End Property Public Property [NextDueTimeKey_IsNull] As Boolean Get Return IsNull(6) End Get Set If (value) SetNull(6) Else Throw new InvalidOperationException("IsNull property cannot be set to False. Assign a value to the column instead.") End If End Set End Property Public Property [NextReprcTimeKey]() As Int32 Get Return Buffer.GetInt32(Me.BufferColumnIndexes(7)) End Get Set Me(7) = Value End Set End Property Public Property [NextReprcTimeKey_IsNull] As Boolean Get Return IsNull(7) End Get Set If (value) SetNull(7) Else Throw new InvalidOperationException("IsNull property cannot be set to False. Assign a value to the column instead.") End If End Set End Property Public Property [ObgtnEffTimeKey]() As Int32 Get Return Buffer.GetInt32(Me.BufferColumnIndexes(8)) End Get Set Me(8) = Value End Set End Property Public Property [ObgtnEffTimeKey_IsNull] As Boolean Get Return IsNull(8) End Get Set If (value) SetNull(8) Else Throw new InvalidOperationException("IsNull property cannot be set to False. Assign a value to the column instead.") End If End Set End Property Public Property [ObgtnOrigTimeKey]() As Int32 Get Return Buffer.GetInt32(Me.BufferColumnIndexes(9)) End Get Set Me(9) = Value End Set End Property Public Property [ObgtnOrigTimeKey_IsNull] As Boolean Get Return IsNull(9) End Get Set If (value) SetNull(9) Else Throw new InvalidOperationException("IsNull property cannot be set to False. Assign a value to the column instead.") End If End Set End Property Public Property [ObgtnPostTimeKey]() As Int32 Get Return Buffer.GetInt32(Me.BufferColumnIndexes(10)) End Get Set Me(10) = Value End Set End Property Public Property [ObgtnPostTimeKey_IsNull] As Boolean Get Return IsNull(10) End Get Set If (value) SetNull(10) Else Throw new InvalidOperationException("IsNull property cannot be set to False. Assign a value to the column instead.") End If End Set End Property Public Property [OrigMaturTimeKey]() As Int32 Get Return Buffer.GetInt32(Me.BufferColumnIndexes(11)) End Get Set Me(11) = Value End Set End Property Public Property [OrigMaturTimeKey_IsNull] As Boolean Get Return IsNull(11) End Get Set If (value) SetNull(11) Else Throw new InvalidOperationException("IsNull property cannot be set to False. Assign a value to the column instead.") End If End Set End Property Public Property [PastDueTimeKey]() As Int32 Get Return Buffer.GetInt32(Me.BufferColumnIndexes(12)) End Get Set Me(12) = Value End Set End Property Public Property [PastDueTimeKey_IsNull] As Boolean Get Return IsNull(12) End Get Set If (value) SetNull(12) Else Throw new InvalidOperationException("IsNull property cannot be set to False. Assign a value to the column instead.") End If End Set End Property Public Property [PrincPaidToTimeKey]() As Int32 Get Return Buffer.GetInt32(Me.BufferColumnIndexes(13)) End Get Set Me(13) = Value End Set End Property Public Property [PrincPaidToTimeKey_IsNull] As Boolean Get Return IsNull(13) End Get Set If (value) SetNull(13) Else Throw new InvalidOperationException("IsNull property cannot be set to False. Assign a value to the column instead.") End If End Set End Property Public Property [PrincPrevTimekey]() As Int32 Get Return Buffer.GetInt32(Me.BufferColumnIndexes(14)) End Get Set Me(14) = Value End Set End Property Public Property [PrincPrevTimekey_IsNull] As Boolean Get Return IsNull(14) End Get Set If (value) SetNull(14) Else Throw new InvalidOperationException("IsNull property cannot be set to False. Assign a value to the column instead.") End If End Set End Property Public Property [REAMNextSchedTimeKey]() As Int32 Get Return Buffer.GetInt32(Me.BufferColumnIndexes(15)) End Get Set Me(15) = Value End Set End Property Public Property [REAMNextSchedTimeKey_IsNull] As Boolean Get Return IsNull(15) End Get Set If (value) SetNull(15) Else Throw new InvalidOperationException("IsNull property cannot be set to False. Assign a value to the column instead.") End If End Set End Property Public Property [REAMPeriodTimeKey]() As Int32 Get Return Buffer.GetInt32(Me.BufferColumnIndexes(16)) End Get Set Me(16) = Value End Set End Property Public Property [REAMPeriodTimeKey_IsNull] As Boolean Get Return IsNull(16) End Get Set If (value) SetNull(16) Else Throw new InvalidOperationException("IsNull property cannot be set to False. Assign a value to the column instead.") End If End Set End Property Public Property [StatChngTimeKey]() As Int32 Get Return Buffer.GetInt32(Me.BufferColumnIndexes(17)) End Get Set Me(17) = Value End Set End Property Public Property [StatChngTimeKey_IsNull] As Boolean Get Return IsNull(17) End Get Set If (value) SetNull(17) Else Throw new InvalidOperationException("IsNull property cannot be set to False. Assign a value to the column instead.") End If End Set End Property Public ReadOnly Property [EffectiveDt]() As DateTime Get Return Buffer.GetDateTime(Me.BufferColumnIndexes(18)) End Get End Property Public ReadOnly Property [EffectiveDt_IsNull] As Boolean Get Return IsNull(18) End Get End Property Public ReadOnly Property [LastRenewDt]() As DateTime Get Return Buffer.GetDateTime(Me.BufferColumnIndexes(19)) End Get End Property Public ReadOnly Property [LastRenewDt_IsNull] As Boolean Get Return IsNull(19) End Get End Property Public ReadOnly Property [NextDueDt]() As DateTime Get Return Buffer.GetDateTime(Me.BufferColumnIndexes(20)) End Get End Property Public ReadOnly Property [NextDueDt_IsNull] As Boolean Get Return IsNull(20) End Get End Property Public ReadOnly Property [NextReprcDt]() As DateTime Get Return Buffer.GetDateTime(Me.BufferColumnIndexes(21)) End Get End Property Public ReadOnly Property [NextReprcDt_IsNull] As Boolean Get Return IsNull(21) End Get End Property Public ReadOnly Property [ObgtnEffDt]() As DateTime Get Return Buffer.GetDateTime(Me.BufferColumnIndexes(22)) End Get End Property Public ReadOnly Property [ObgtnEffDt_IsNull] As Boolean Get Return IsNull(22) End Get End Property Public ReadOnly Property [ObgtnOrigDt]() As DateTime Get Return Buffer.GetDateTime(Me.BufferColumnIndexes(23)) End Get End Property Public ReadOnly Property [ObgtnOrigDt_IsNull] As Boolean Get Return IsNull(23) End Get End Property Public ReadOnly Property [ObgtnPostDt]() As DateTime Get Return Buffer.GetDateTime(Me.BufferColumnIndexes(24)) End Get End Property Public ReadOnly Property [ObgtnPostDt_IsNull] As Boolean Get Return IsNull(24) End Get End Property Public ReadOnly Property [PrincPaidToDt]() As DateTime Get Return Buffer.GetDateTime(Me.BufferColumnIndexes(25)) End Get End Property Public ReadOnly Property [PrincPaidToDt_IsNull] As Boolean Get Return IsNull(25) End Get End Property Public ReadOnly Property [PrincPrevDt]() As DateTime Get Return Buffer.GetDateTime(Me.BufferColumnIndexes(26)) End Get End Property Public ReadOnly Property [PrincPrevDt_IsNull] As Boolean Get Return IsNull(26) End Get End Property Public ReadOnly Property [StatChngDt]() As DateTime Get Return Buffer.GetDateTime(Me.BufferColumnIndexes(27)) End Get End Property Public ReadOnly Property [StatChngDt_IsNull] As Boolean Get Return IsNull(27) End Get End Property Public ReadOnly Property [PastDueDt]() As DateTime Get Return Buffer.GetDateTime(Me.BufferColumnIndexes(28)) End Get End Property Public ReadOnly Property [PastDueDt_IsNull] As Boolean Get Return IsNull(28) End Get End Property Public ReadOnly Property [REAMNextSchedDt]() As DateTime Get Return Buffer.GetDateTime(Me.BufferColumnIndexes(29)) End Get End Property Public ReadOnly Property [REAMNextSchedDt_IsNull] As Boolean Get Return IsNull(29) End Get End Property Public ReadOnly Property [REAMPeriodDt]() As DateTime Get Return Buffer.GetDateTime(Me.BufferColumnIndexes(30)) End Get End Property Public ReadOnly Property [REAMPeriodDt_IsNull] As Boolean Get Return IsNull(30) End Get End Property Public ReadOnly Property [CODt]() As DateTime Get Return Buffer.GetDateTime(Me.BufferColumnIndexes(31)) End Get End Property Public ReadOnly Property [CODt_IsNull] As Boolean Get Return IsNull(31) End Get End Property Public Property [RenewPostTimeKey]() As Int32 Get Return Buffer.GetInt32(Me.BufferColumnIndexes(32)) End Get Set Me(32) = Value End Set End Property Public Property [RenewPostTimeKey_IsNull] As Boolean Get Return IsNull(32) End Get Set If (value) SetNull(32) Else Throw new InvalidOperationException("IsNull property cannot be set to False. Assign a value to the column instead.") End If End Set End Property Public ReadOnly Property [BaslGuarRatingDt]() As DateTime Get Return Buffer.GetDateTime(Me.BufferColumnIndexes(33)) End Get End Property Public ReadOnly Property [BaslGuarRatingDt_IsNull] As Boolean Get Return IsNull(33) End Get End Property Public ReadOnly Property [LegalMaturDt]() As DateTime Get Return Buffer.GetDateTime(Me.BufferColumnIndexes(34)) End Get End Property Public ReadOnly Property [LegalMaturDt_IsNull] As Boolean Get Return IsNull(34) End Get End Property Public ReadOnly Property [RiskRatingDt]() As DateTime Get Return Buffer.GetDateTime(Me.BufferColumnIndexes(35)) End Get End Property Public ReadOnly Property [RiskRatingDt_IsNull] As Boolean Get Return IsNull(35) End Get End Property Public ReadOnly Property [OrigMaturDt]() As DateTime Get Return Buffer.GetDateTime(Me.BufferColumnIndexes(36)) End Get End Property Public ReadOnly Property [OrigMaturDt_IsNull] As Boolean Get Return IsNull(36) End Get End Property Public ReadOnly Property [RenewPostDt]() As DateTime Get Return Buffer.GetDateTime(Me.BufferColumnIndexes(37)) End Get End Property Public ReadOnly Property [RenewPostDt_IsNull] As Boolean Get Return IsNull(37) End Get End Property Public Property [CloseTimeKey]() As Int32 Get Return Buffer.GetInt32(Me.BufferColumnIndexes(38)) End Get Set Me(38) = Value End Set End Property Public Property [CloseTimeKey_IsNull] As Boolean Get Return IsNull(38) End Get Set If (value) SetNull(38) Else Throw new InvalidOperationException("IsNull property cannot be set to False. Assign a value to the column instead.") End If End Set End Property Public ReadOnly Property [CloseDt]() As DateTime Get Return Buffer.GetDateTime(Me.BufferColumnIndexes(39)) End Get End Property Public ReadOnly Property [CloseDt_IsNull] As Boolean Get Return IsNull(39) End Get End Property Public Overloads Function NextRow() As Boolean NextRow = MyBase.NextRow() End Function Public Overloads Function EndOfRowset() As Boolean EndOfRowset = MyBase.EndOfRowset End FunctionEnd Class

Viewing all articles
Browse latest Browse all 3145

Trending Articles