【发布时间】:2016-11-28 09:33:08
【问题描述】:
我在执行一个包时遇到了一个非常特殊的情况。由于业务需求,包中所有 DFT 中的派生列已替换为脚本任务。
在开发中执行包有时会导致偶尔出现错误,错误语句为“值太大而无法添加到缓冲区”,有时脚本任务失败说明
System.ArgumentOutOfRangeException:年、月和日参数 描述一个无法表示的日期时间
或
毫秒值超出范围(不在 0 和 999 之间)。
执行期间收到的其他一些错误消息如下:-
描述:未指定的错误结束错误错误:2016-11-24 10:51:03.37 代码:0xC0047062 来源:Dft_x [279]
说明:System.ArgumentOutOfRangeException:年、月和日 参数描述了一个不可表示的日期时间。在 Microsoft.SqlServer.Dts.Pipeline.ScriptComponentHost.HandleUserException(异常 吃 Microsoft.SqlServer.Dts.Pipeline.ScriptComponentHost.ProcessInput(Int32 inputID,PipelineBuffer 缓冲区)在 Microsoft.SqlServer.Dts.Pipeline.ManagedComponentHost.HostProcessInput(IDTSManagedComponentWrapper100 包装器,Int32 inputID,IDTSBuffer100 pDTSBuffer,IntPtr bufferWirePacket) End Error 错误:
&
[SSIS.Pipeline] 错误:SSIS 错误代码 DTS_E_PRIMEOUTPUTFAILED。这 平面文件源 1 上的 PrimeOutput 方法返回错误代码 0xC02020C4。管道时组件返回失败代码 引擎称为 PrimeOutput()。故障码的含义是 由组件定义,但错误是致命的,并且管道 停止执行。在此之前可能会发布错误消息 提供有关失败的更多信息。
[OleDst_Pricing [165]] 错误:SSIS 错误代码 DTS_E_OLEDBERROR。一个 发生 OLE DB 错误。错误代码:0x80004005。 OLE DB 记录是 可用的。来源:“Microsoft SQL Server Native Client 11.0” Hresult:0x80004005 描述:“无效的日期格式”。 [OleDst_xyz [165]] 错误:出现错误 OleDst_xyz.Inputs[OLE DB 目标输入].Columns[DateColumn] on OleDst_xyz.Inputs[OLE DB 目标输入]。列状态 返回的是:“转换失败,因为数据值溢出 指定类型。”。[OleDst_x [165]] 错误:SSIS 错误代码 DTS_E_INDUCEDTRANSFORMFAILUREON错误。 “OleDst_xyz.Inputs[OLE DB Destination Input]" 失败,因为发生错误代码 0xC020907A, 以及“OleDst_xyz.Inputs[OLE DB Destination Input]" 指定错误时失败。错误发生在 指定组件的指定对象。可能有错误 在此之前发布的消息,其中包含有关失败的更多信息。
[FltSrc_x 1 [313]] 错误:尝试向 数据流任务缓冲区失败,错误代码为 0xC0047020。
[SSIS.Pipeline] 错误:SSIS 错误代码 DTS_E_PRIMEOUTPUTFAILED。这 FltSrc_BR_x 1 上的 PrimeOutput 方法返回错误代码 0xC02020C4。管道时组件返回失败代码 引擎称为 PrimeOutput()。故障码的含义是 由组件定义,但错误是致命的,并且管道 停止执行。在此之前可能会发布错误消息 提供有关失败的更多信息。
然而,在调整了 DefaultMaxBufferRows 和 DefaultMaxBufferSize 属性之后,我在开发和测试环境中通过 SQL Server 单独成功地执行了大约 40 次包,以确保它不会再次失败。但生产执行再次失败,出现类似的特定日期错误。
我发布了包含在每个 DFT 中相似的脚本任务中的以下代码:-
Public Class ScriptMain
Inherits UserComponent
Dim xyzArray() As String
Dim rowValue As String
Dim strDate As String
Dim columnxyz As String '= Me.Variables.MaterialMaster.ToString()
'Dim v1 As IDTSVariables100
Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
rowValue = Row.XYZtoABC.ToString() + "~".ToString()
xyzArray = rowValue.Split(New Char() {"~"c})
strDate = Row.DateColumn.ToString()
columnxyz = Row.columnxyz.ToString()
CreateNewOutputRows()
End Sub
Public Sub CreateNewOutputRows()
ResultBuffer.AddRow()
ResultBuffer.xyz1 = xyzArray(1)
ResultBuffer.xyz2 = xyzArray(2)
ResultBuffer.xyz3 = xyzArray(3)
ResultBuffer.xyz4 = xyzArray(4)
ResultBuffer.xyz5 = xyzArray(5)
ResultBuffer.Datecolumn = CDate(strDate)
ResultBuffer.columnxyz = columnxyz
End Sub
End Class
【问题讨论】: