SSIS で dts パッケージをデバッグしようとしています。入力変数を渡してカウンターをインクリメントするスクリプト コンポーネント デザイナーがあります。カウンター値を msgbox しようとすると、次のエラーが発生します。
エラー: STAGING1 から STAGING2、STAGING2 で 0xC0202009 [1056]: OLE DB エラーが発生しました。エラー コード: 0x80040E14。 OLE DB レコードが利用可能です。ソース: "Microsoft SQL Native Client" Hresult: 0x80040E14 説明: "リンク サーバー "(null)" の OLE DB プロバイダー "BULK" から行をフェッチできません。 OLE DB レコードが利用可能です。ソース: "Microsoft SQL Native Client" Hresult: 0x80040E14 説明: "リンク サーバー "(null)" の OLE DB プロバイダー "BULK" がエラーを報告しました。プロバイダーはエラーに関する情報を提供しませんでした。". OLE DB レコードが利用可能です。ソース: "Microsoft SQL Native Client" Hresult: 0x80040E14 説明: "DTS バッファーからの読み取りがタイムアウトしました。".
以下は、スクリプト コンポーネント デザイナー内のコードの一部です。
Imports System
Imports System.Data
Imports System.Math
Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper
Imports Microsoft.SqlServer.Dts.Runtime.Wrapper
Public Class ScriptMain
Inherits UserComponent
Dim iCounter As Integer
Dim iCurrentVal As Integer
Dim sCurrentOracleSeq As String
Dim sSeqName As String
Dim sSeqAltProcName As String
Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
'
' Add your code here
'
Row.SEQIDNCASE = iCounter + iCurrentVal
iCounter += 1
MsgBox(iCounter + iCurrentVal, MsgBoxStyle.Information, "Input0")
End Sub
Public Overrides Sub PreExecute()
sCurrentOracleSeq = Me.Variables.VSEQIDCurVal
iCurrentVal = CInt(sCurrentOracleSeq)
MsgBox(iCurrentVal, MsgBoxStyle.Information, "No Title")
iCounter = 0
sSeqName = Me.Variables.VSEQIDName
sSeqAltProcName = Me.Variables.VSEQIDAlterProc
End Sub
Public Overrides Sub PostExecute()
Me.Variables.VSEQIDUpdateSQL = "Begin " & sSeqAltProcName & "('" & sSeqName & "'," & (iCounter + iCurrentVal) & "); End;"
End Sub
End Class
Msgbox を含む行をコメントアウトすると、コードの上記の部分は完全に正常に機能することに注意してください。