Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net SSIS中偶尔出现脚本任务错误_Vb.net_Ssis_Buffer - Fatal编程技术网

Vb.net SSIS中偶尔出现脚本任务错误

Vb.net SSIS中偶尔出现脚本任务错误,vb.net,ssis,buffer,Vb.net,Ssis,Buffer,我在执行一个包时遇到了一个非常特殊的情况。由于业务需求,包中所有DFT中的派生列都已替换为脚本任务 在开发时执行包会导致偶发错误,有时错误语句为“值太大,无法添加到缓冲区”,有时脚本任务失败 System.ArgumentOutOfRangeException:年、月和日参数 描述一个不可表示的日期时间 或 毫秒值超出范围(不在0和999之间) 执行期间收到的一些其他错误消息如下所述:- 说明:未指定错误结束错误:2016-11-24 10:51:03.37代码:0xC0047062来源:Dft

我在执行一个包时遇到了一个非常特殊的情况。由于业务需求,包中所有DFT中的派生列都已替换为脚本任务

在开发时执行包会导致偶发错误,有时错误语句为“值太大,无法添加到缓冲区”,有时脚本任务失败

System.ArgumentOutOfRangeException:年、月和日参数 描述一个不可表示的日期时间

毫秒值超出范围(不在0和999之间)

执行期间收到的一些其他错误消息如下所述:-

说明:未指定错误结束错误:2016-11-24 10:51:03.37代码:0xC0047062来源:Dft_x[279]
描述:System.ArgumentOutOfRange异常:年、月和日 参数描述不可表示的日期时间。在 Microsoft.SqlServer.Dts.Pipeline.ScriptComponentHost.HandleUserException(异常 e) 在 Microsoft.SqlServer.Dts.Pipeline.ScriptComponentHost.ProcessInput(Int32 inputID,PipelineBuffer(缓冲区) Microsoft.SqlServer.Dts.Pipeline.ManagedComponentHost.HostProcessInput(IDTSManagedComponentWrapper100 包装器,Int32-inputID,IDTSBuffer100-pDTSBuffer,IntPtr 缓冲区(数据包)结束错误:

&

[SSIS.Pipeline]错误:SSIS错误代码DTS_E_PRIMEOUTPUTFAILED。这个 平面文件源1上的PrimeOutput方法返回错误代码 0xC02020C4。当管道运行时,组件返回了故障代码 引擎名为PrimeOutput()。故障代码的含义如下: 由组件定义,但错误是致命的,管道 停止执行。在此之前可能会发布错误消息 有更多关于失败的信息

[OleDst_定价[165]]错误:SSIS错误代码DTS_E_OLEDERROR。一 发生OLE DB错误。错误代码:0x80004005。OLEDB记录不可用 可用。来源:“Microsoft SQL Server本机客户端11.0” Hresult:0x80004005说明:“日期格式无效”。 [OleDst_xyz[165]]错误:发生错误 OleDst_xyz.Inputs[OLE DB Destination Input]。上的列[DateColumn] OleDst_xyz.Inputs[OLE DB目标输入]。列状态 返回的是:“转换失败,因为数据值溢出了 指定类型。”。[OleDst_x[165]]错误:SSIS错误代码 DTS_E_导致的传输故障或错误。“OleDst_xyz.Inputs[OLE “数据库目标输入]”失败,因为出现错误代码0xC020907A, 以及“OleDst_xyz.Inputs[OLE DB]上的错误行配置 目标输入]“指定出错时失败。上发生错误 指定组件的指定对象。可能有错误 在此之前发布的消息包含有关故障的更多信息

[FltSrc_x 1[313]]错误:尝试将行添加到 数据流任务缓冲区失败,错误代码为0xC0047020

[SSIS.Pipeline]错误:SSIS错误代码DTS_E_PRIMEOUTPUTFAILED。这个 FltSrc_BR_x 1上的PrimeOutput方法返回错误代码 0xC02020C4。当管道运行时,组件返回了故障代码 引擎名为PrimeOutput()。故障代码的含义如下: 由组件定义,但错误是致命的,管道 停止执行。在此之前可能会发布错误消息 有更多关于失败的信息

然而,在调整DefaultMaxBufferRows&DefaultMaxBufferSize属性之后,我在开发和测试环境中成功地单独并通过SQLServer执行了大约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

这个问题与数据有关。您有时会导入不能表示为日期的数据,并尝试将其输出为日期。由于您没有任何代码来捕获此信息,因此您将得到一个错误

你可以试试这条线。。CATCH块,并决定在字符串无法转换为日期的情况下执行的操作:

   ResultBuffer.Datecolumn = CDate(strDate)

这个问题与数据有关。您有时会导入不能表示为日期的数据,并尝试将其输出为日期。由于您没有任何代码来捕获此信息,因此您将得到一个错误

你可以试试这条线。。CATCH块,并决定在字符串无法转换为日期的情况下执行的操作:

   ResultBuffer.Datecolumn = CDate(strDate)

如果标准日期具有特定格式(即:
“dd-MM-yyy-HH:MM:ss”
)。您必须使用
Date.ParseExact()
函数,如下所示:

ResultBuffer.Datecolumn = Date.ParseExact(strDate,"dd-MM-yyyy HH:mm:ss",System.Globalization.CultureInfo.InvariantCulture,System.Globalization.DateTimeStyles.None)
dim strFormats() as string = {"dd-MM-yyyy","yyyy-MM-dd"}
ResultBuffer.Datecolumn = Date.ParseExact(strDate,strFormats,System.Globalization.CultureInfo.InvariantCulture,System.Globalization.DateTimeStyles.None)
此外,如果有许多特定格式,可以声明字符串数组并将其传递给此函数,如下所示:

ResultBuffer.Datecolumn = Date.ParseExact(strDate,"dd-MM-yyyy HH:mm:ss",System.Globalization.CultureInfo.InvariantCulture,System.Globalization.DateTimeStyles.None)
dim strFormats() as string = {"dd-MM-yyyy","yyyy-MM-dd"}
ResultBuffer.Datecolumn = Date.ParseExact(strDate,strFormats,System.Globalization.CultureInfo.InvariantCulture,System.Globalization.DateTimeStyles.None)
CDate
功能与您的区域设置相关,因此使用
Date.ParseExact


另一点是,如果标准日期具有特定格式(即:
“dd-MM-yyyy-HH:MM:ss”
),则使用
DB\u-TIMESTAMP
作为列类型,而不是
DT\u-DATE
。您必须使用
Date.ParseExact()
函数,如下所示:

ResultBuffer.Datecolumn = Date.ParseExact(strDate,"dd-MM-yyyy HH:mm:ss",System.Globalization.CultureInfo.InvariantCulture,System.Globalization.DateTimeStyles.None)
dim strFormats() as string = {"dd-MM-yyyy","yyyy-MM-dd"}
ResultBuffer.Datecolumn = Date.ParseExact(strDate,strFormats,System.Globalization.CultureInfo.InvariantCulture,System.Globalization.DateTimeStyles.None)
此外,如果有许多特定格式,可以声明字符串数组并将其传递给此函数,如下所示:

ResultBuffer.Datecolumn = Date.ParseExact(strDate,"dd-MM-yyyy HH:mm:ss",System.Globalization.CultureInfo.InvariantCulture,System.Globalization.DateTimeStyles.None)
dim strFormats() as string = {"dd-MM-yyyy","yyyy-MM-dd"}
ResultBuffer.Datecolumn = Date.ParseExact(strDate,strFormats,System.Globalization.CultureInfo.InvariantCulture,System.Globalization.DateTimeStyles.None)
CDate
功能与您的区域设置相关,因此使用
Date.ParseExact


另一点是使用
DB\u TIMESTAMP
作为列类型,而不是
DT\u DATE

strDate在脚本任务之前通过派生列从GETDATE()获取输入。是否仍需要使用Date.ParseExact()?@MominGoni
GETDATE()
取决于SQL Server排序规则,
CDATE()
取决于计算机区域settings@Mom