1

我在让我的数据流做我想做的事情时遇到了一些问题。

我正在使用一个 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

我在将数据流输出到这些列时遇到问题。现在我将存储过程调用连接到派生列,然后连接到脚本。但这不起作用,因为当我创建输出列时,它不允许我输出到脚本中的输出缓冲区。只是为了澄清 - 脚本将在 VB.NET 中

这是我的脚本到目前为止的样子。我在输出中添加了 NumberOfUsers 列。但我仍然没有 Output0buffer 代码图片

有人有想法么?

4

2 回答 2

2

您只会在代码中为异步转换生成一个 OutputBuffer(其中SynchronousInputID一个或多个输出的属性设置为零)。对于同步转换,您的输出列将位于 InputBuffer 中。

比较 MSDN 文章使用脚本组件创建异步转换和使用脚本组件创建同步转换

于 2013-09-03T15:19:38.297 回答
1

你有没有像这样在你的输出中添加一列?

在此处输入图像描述

然后您的输出缓冲区将如下所示:

TableOutputBuffer.OutputColumnName = "你好";

看看我在这里找到的这个示例,也许可以将它与你的代码进行比较。我通常用 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
于 2013-08-30T16:01:26.703 回答