2013-06-17 3 views
3

У меня есть DataFlow, где есть компонент скрипта в качестве источника.Компонент скрипта SSIS как источник генерирует System.NullReferenceException

Я определил Output (OutputRows) и Column (MyOutputValue) в соответствии с моими потребностями.

Когда я хочу, чтобы проверить мой сценарий, даже при жестких закодированных значений, я всегда получаю ту же ошибку:

System.NullReferenceException: Object reference not set to an instance of an object. at ScriptMain.CreateNewOutputRows().

Я понятия не имею, что происходит здесь не так. Есть идеи?

Вот мой код:

using System; 
using System.Data; 
using System.Windows.Forms; 
using System.Threading; 
using System.Globalization; 
using Microsoft.SqlServer.Dts.Pipeline.Wrapper; 
using Microsoft.SqlServer.Dts.Runtime.Wrapper; 
using Microsoft.SqlServer.Dts.Runtime; 
using Excel = Microsoft.Office.Interop.Excel; 

[Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute] 
public class ScriptMain : UserComponent 
{ 
#region Members 
    String MyOutputValue; 
#endregion 

public override void PreExecute() 
{ 
    base.PreExecute(); 


    MyOutputValue = "test"; 

    CreateNewOutputRows(); 

} 

public override void PostExecute() 
{ 

base.PostExecute(); 
} 

public override void CreateNewOutputRows() 
{ 
    OutputRowsBuffer.AddRow(); 

    OutputRowsBuffer.MyOutputValue = MyOutputValue; 
} 
} 

В моем SSIS пакет я начинаю отлаживать и затем я получаю следующий экран (это немецкий, так что я перевел ошибку на английский язык для этой должности): enter image description here

+0

Где именно вы получаете исключение? Пожалуйста, разместите трассировку стека. –

+0

Я добавил сообщение, которое получаю, когда я отлаживаю пакет. Это все, что у меня есть. Вам нужно, чтобы я добавил что-то еще в код, чтобы дать вам больше информации об ошибке? – BaseBallBatBoy

+0

Почти все случаи «NullReferenceException» одинаковы. См. «[Что такое исключение NullReferenceException в .NET?] (Http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-in-net)» для некоторых советов. –

ответ

4

Время выполнения SSIS не инициализирует выходные буферы (например, ваш объект OutputRowsBuffer) до послеPreExecute метод возвращает.

К сожалению, ваш метод PreExecute звонит CreateNewOutputRowsнепосредственно, который вызывает NullReferenceException. Вместо этого, вы должны позволить во время выполнения вызова служб SSIS CreateNewOutputRows (который он, в соответствующей точке в цикле выполнения):

public override void PreExecute() 
{ 
    base.PreExecute(); 

    MyOutputValue = "test"; 

    // Do NOT call CreateNewOutputRows from PreExecute! 
    // CreateNewOutputRows(); 
} 

public override void CreateNewOutputRows() 
{ 
    OutputRowsBuffer.AddRow(); 
    OutputRowsBuffer.MyOutputValue = MyOutputValue; 
} 

См Creating a Source with the Script Component страницу на MSDN для дополнительного кода образца.

+0

спасибо! вот и все! – BaseBallBatBoy

Смежные вопросы