我遇到一些问题让我的数据流做我想做的事。
我正在使用OLEDB源来调用使用表变量的存储过程来向我显示我需要使用的数据。 它看起来像这样:
ClientID TimeStamp IsStart
pic@psdfj 2013-08-28 14:22:59 1
bsd@fjskk 2013-08-28 14:43:21 1
pic@psdfj 2013-08-28 15:23:01 0
..and so on
我需要创建两个新列,一个带有时间戳,另一个带有IsStart列。 (我正在跟踪用户何时在线并捕获时间戳。) 所以我的SQL Server数据库中有一个名为tblUserUsage的空表,其中包含以下列:
tblUserUsage (example of what the data would look like)
TimeStamp NumberOfUsers
2013-08-28 14:22:59 1
2013-08-28 14:43:21 2
2013-08-28 15:23:01 1
我在将数据流输出到这些列时遇到问题。现在我将storedprocedure调用连接到派生列,然后连接到脚本。但这不起作用,因为当我创建输出列时,它不会让我输出到脚本中的outputbuffer。只是为了澄清 - 脚本将在VB.NET中
这是我的脚本到目前为止的样子。我在输出中添加了NumberOfUsers列。但我仍然没有Output0buffer
有人有什么想法吗?
答案 0 :(得分:2)
您只需在代码中为异步转换生成一个OutputBuffer(其中一个或多个输出的SynchronousInputID
属性设置为零)。对于同步转换,输出列将位于InputBuffer中。
比较MSDN文章Creating an Asynchronous Transformation with the Script Component和Creating a Synchronous Transformation with the Script Component。
答案 1 :(得分:1)
您是否像这样在输出中添加了一列?
然后你的输出缓冲区看起来像这样:
TableOutputBuffer.OutputColumnName =“hello”;
看一下这个样本我发现here并且可能将它与你的代码进行比较..我通常用c#写我的脚本所以我可以告诉你,如果你遗漏了任何东西,但值得一试。
Public Class ScriptMain
Inherits UserComponent
Dim connMgr As IDTSConnectionManager100
Dim sqlConn As SqlConnection
Dim sqlReader As SqlDataReader
Public Overrides Sub AcquireConnections(ByVal Transaction As Object)
connMgr = Me.Connections.MyADONETConnection
sqlConn = CType(connMgr.AcquireConnection(Nothing), SqlConnection)
End Sub
Public Overrides Sub PreExecute()
Dim cmd As New SqlCommand("SELECT AddressID, City, StateProvinceID FROM Person.Address", sqlConn)
sqlReader = cmd.ExecuteReader
End Sub
Public Overrides Sub CreateNewOutputRows()
Do While sqlReader.Read
With MyAddressOutputBuffer
.AddRow()
.AddressID = sqlReader.GetInt32(0)
.City = sqlReader.GetString(1)
End With
Loop
End Sub
Public Overrides Sub PostExecute()
sqlReader.Close()
End Sub
Public Overrides Sub ReleaseConnections()
connMgr.ReleaseConnection(sqlConn)
End Sub
End Class