Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: [VB.net & SSIS] Вызов процедуры Добавлено: 26.01.11 10:25  

Автор вопроса:  basic_int
Всем привет

Подскажите, как можно вызвать процедуру InputData_ProcessInputRow в процедуре CreateNewOutputRows()?

Public Overrides Sub InputData_ProcessInputRow(ByVal Row As InputDataBuffer)
Me.OutputDataBuffer.AddRow()
Me.OutputDataBuffer.ResultNode = Row.Client + Row.Goal
End Sub


Public Overrides Sub CreateNewOutputRows()

InputData_ProcessInputRow(????)

End Sub

Ответить

  Ответы Всего ответов: 9  

Номер ответа: 1
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #1 Добавлено: 26.01.11 14:16
По коду могу предположить что одна строка входящего потока равна одной строке исходящего. Зачем же ты тогда сделал поткои асинхронными? Сделай их синхронными, добавь в столбец одно поле и модифицируй его приз кода.

Ответить

Номер ответа: 2
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #2 Добавлено: 26.01.11 14:17
И это, кстати, можно делать через Derived Column, а не на ScriptTask - сложение там без проблем должно выполняться

Ответить

Номер ответа: 3
Автор ответа:
 basic_int



Вопросов: 1
Ответов: 4
 Профиль | | #3 Добавлено: 26.01.11 15:05
У меня немного другая задача. Необходимо несколько раз подряд вывести результат процедуры InputData_ProcessInputRow. Пытаюсь через DataTable, но безуспешно.
  1. Imports System
  2. Imports System.Data
  3. Imports System.Math
  4. Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper
  5. Imports Microsoft.SqlServer.Dts.Runtime.Wrapper
  6.  
  7. <Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute> _
  8. <CLSCompliant(False)> _
  9. Public Class ScriptMain
  10.     Inherits UserComponent
  11.     Public ds As New DataSet
  12.     Public Sub createDataset()
  13.         Dim dt As New DataTable("Nodes")
  14.         dt.Columns.Add("Node", String.Empty.GetType())
  15.         ds.Tables.Add(dt)
  16.     End Sub
  17.     
  18.  
  19.     Public Overrides Sub PreExecute()
  20.         MyBase.PreExecute()
  21.     End Sub
  22.  
  23.     Public Overrides Sub PostExecute()
  24.         MyBase.PostExecute()
  25.     End Sub
  26.  
  27.  
  28.     Public Overrides Sub InputData_ProcessInputRow(ByVal Row As InputDataBuffer)
  29.  
  30.         Dim dr As DataRow = ds.Tables("Nodes").NewRow()
  31.         dr("Node") = Row.Goal
  32.         ds.Tables("Nodes").Rows.Add(dr)
  33.  
  34.     End Sub
  35.  
  36.  
  37.     Public Overrides Sub CreateNewOutputRows()
  38.  
  39.         Dim myRow As DataRow
  40.  
  41.         Me.OutputDataBuffer.AddRow()
  42.         Me.OutputDataBuffer.ResultNode = "[Version]"
  43.         Me.OutputDataBuffer.AddRow()
  44.         Me.OutputDataBuffer.ResultNode = """Project_by_VB"""
  45.         Me.OutputDataBuffer.AddRow()
  46.         Me.OutputDataBuffer.ResultNode = "[Hierarchy]"
  47.         Me.OutputDataBuffer.AddRow()
  48.         Me.OutputDataBuffer.ResultNode = """Project""" & "#" & """Projects"""
  49.         Me.OutputDataBuffer.AddRow()
  50.         Me.OutputDataBuffer.ResultNode = "[Node]"
  51.  
  52.         For Each myRow In ds.Tables("Nodes").Rows
  53.             Me.OutputDataBuffer.AddRow()
  54.             MsgBox(myRow.Item("Node").ToString())
  55.             Me.OutputDataBuffer.ResultNode = myRow.Item("Node").ToString()
  56.         Next
  57.  
  58.     End Sub
  59.  
  60. End Class



Спасибо

Ответить

Номер ответа: 4
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #4 Добавлено: 26.01.11 17:29
опиши подробнее что за задача
Если тебе надо в поток вставить несколько строк, то это можно сделать проще, взять другой источник, можно даже ScriptTask, в нем сгенерить эти стркои, а потом слить все вместе в один поток

Ответить

Номер ответа: 5
Автор ответа:
 basic_int



Вопросов: 1
Ответов: 4
 Профиль | | #5 Добавлено: 26.01.11 17:42
Есть входящий файл со строками:
Node 1
Node 2
Node 3

Необходимо получить:
Project - Node 1
Project - Node 2
Project - Node 3
TopNode - Node 1
TopNode - Node 2
TopNode - Node 3

Т.е. Node 1, Node 2, Node 3 должно повториться несколько раз в выходном потоке

Ответить

Номер ответа: 6
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #6 Добавлено: 26.01.11 21:03
В одном потоке
Node 1
Node 2
Node 3

В другом
Project
TopNode

так?

Тогда можно слить через MergeJoin

Ответить

Номер ответа: 7
Автор ответа:
 basic_int



Вопросов: 1
Ответов: 4
 Профиль | | #7 Добавлено: 27.01.11 10:31
Project и TopNode - обычный текст. На мой взгляд, это должно примерно так выглядеть, но в таком случае выводится только одна строка из ds.Tables("Nodes";):


For Each myRow In ds.Tables("Nodes";).Rows
            Me.OutputDataBuffer.AddRow()
            Me.OutputDataBuffer.ResultNode = "Project - " & myRow.Item("Node";).ToString()
Next

For Each myRow In ds.Tables("Nodes";).Rows
            Me.OutputDataBuffer.AddRow()
            Me.OutputDataBuffer.ResultNode = "TopNode - " & myRow.Item("Node";).ToString()
Next


Проблема в том, чтобы несколько раз вывести (Node 1, Node 2, Node 3)

Ответить

Номер ответа: 8
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #8 Добавлено: 28.01.11 07:45
В InputData_ProcessInputRow сразу делаешь вставку строк в исходящий поток.

  1.     Public Overrides Sub InputData_ProcessInputRow(ByVal Row As InputDataBuffer)
  2.         Me.OutputDataBuffer.AddRow()
  3.         Me.OutputDataBuffer.ResultNode = "Project - " & Row.Goal
  4.         Me.OutputDataBuffer.AddRow()
  5.         Me.OutputDataBuffer.ResultNode = "TopNode - " & Row.Goal
  6.  
  7.         If Row.EndOfRowset() Then OutputDataBuffer.SetEndOfRowset
  8.     End Sub


CreateNewOutputRows - этот метод убираешь.

При этом нарушится порядок соритровки, т.е. будет не так как ты показал, а вот так

Project - Node 1
TopNode - Node 1
Project - Node 2
TopNode - Node 2
Project - Node 3
TopNode - Node 3

Если порядок важен, после Script Transformation сделай сортировку по нужным полям.

Ответить

Номер ответа: 9
Автор ответа:
 basic_int



Вопросов: 1
Ответов: 4
 Профиль | | #9 Добавлено: 28.01.11 16:30
Спасибо

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам