Forums Neueste Beiträge
 

SSIS 2005: Fehlermeldung bei einem Skript-Task

07/01/2009 - 09:58 von Christa Kurschat | Report spam
Hallo NG,

ich schlage mich ja immer noch mit meinem SSIS-Projekt herum.
Ich habe jetzt einen Skripttask, der beim Ausführen diesen Fehler bringt:

Error: 0xC0047062 at DFT_GET_SQL_COMMANDS, Script Component [73]:
System.NullReferenceException: Der Objektverweis wurde nicht auf eine
Objektinstanz festgelegt.
bei
Microsoft.SqlServer.Dts.Pipeline.ScriptComponentHost.HandleUserException(Exception
e)
bei
Microsoft.SqlServer.Dts.Pipeline.ScriptComponentHost.ProcessInput(Int32
inputID, PipelineBuffer buffer)
bei
Microsoft.SqlServer.Dts.Pipeline.ManagedComponentHost.HostProcessInput(IDTSManagedComponentWrapper90
wrapper, Int32 inputID, IDTSBuffer90 pDTSBuffer, IntPtr bufferWirePacket)

Könnte es ein Versionsproblem sein? Ich arbeite nicht in der Umgebung, in
der die Pakete ursprünglich erstellt wurden.
Inzwischen wurde sp2, CU9 und da sSP1 für VS2005 eingepielt.

Andererseits habe ich genau dies Paket nicht angfaßt, außer Precompile auf
false zu setzen, weil das auch angemeckert wurde.

Wàr schön, wenn jemand eine Idee hàtte.

Der Skriptcode sieht so aus:
Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)

Dim SQL_Text As String

SQL_Text = Row.SQLTEXT

If (UCase(Row.TARGETTABLE) <> UCase(Row.SOURCETABLE)) Or
(UCase(Row.TARGETVALUE) <> UCase(Row.SOURCEFIELD)) Then

SQL_Text = Replace(SQL_Text, "%" + Row.ITEMTARGETTABLE + "%",
Row.TARGETTABLE)

SQL_Text = Replace(SQL_Text, "%" + Row.ITEMTARGETFIELD + "%",
Row.TARGETVALUE)

SQL_Text = Replace(SQL_Text, "%" + Row.ITEMSOURCETABLE + "%",
Row.SOURCETABLE)

SQL_Text = Replace(SQL_Text, "%" + Row.ITEMSOURCEFIELD + "%",
Row.SOURCEFIELD)


If (Not Row.ALTERNATEPKJOIN.Length = 0) Then ' Or (Row.ALTERNATEPKJOIN. <> "
") Then

SQL_Text = Replace(SQL_Text, "%" + Row.ITEMJOIN + "%", Row.ALTERNATEPKJOIN)

Else

If (Not Row.PKJOIN.Length = 0) Then ' Or (Row.PKJOIN <> " ") Then

SQL_Text = Replace(SQL_Text, "%" + Row.ITEMJOIN + "%", Row.PKJOIN)

Else

SQL_Text = Replace(SQL_Text, "%" + Row.ITEMJOIN + "%", "1=1")

End If

End If

SQLCMDBuffer.AddRow()

SQLCMDBuffer.KEYCOLUMN = ";" + Row.SQLTEMPLATENAME + ";" + Row.TARGETTABLE +
";" + Row.TARGETVALUE + ";"

SQLCMDBuffer.SQLCOMMAND = SQL_Text

End If

End Sub


Gruß
Christa
 

Lesen sie die antworten

#1 Elmar Boye
07/01/2009 - 10:35 | Warnen spam
Hallo Christa,

"Christa Kurschat" schrieb ...
Ich habe jetzt einen Skripttask, der beim Ausführen diesen Fehler bringt:

Error: 0xC0047062 at DFT_GET_SQL_COMMANDS, Script Component [73]: System.NullReferenceException: Der Objektverweis wurde nicht auf
eine Objektinstanz festgelegt.




Eine NullReferenceException tritt ganz allgemein immer auf,
wenn ein Objekt nicht vorhanden (NULL) ist.

Könnte es ein Versionsproblem sein?



Weniger ein Versionsproblem, was die Entwicklungsumgebung angeht,
eher vielleicht was die Datenumgebung angeht.


Der Skriptcode sieht so aus:



Der Skriptcode ist generell leichtsinnig verfasst,
was Versionsànderungen oder auch fehlende Daten angeht.

SQL_Text = Row.SQLTEXT

If (UCase(Row.TARGETTABLE) <> UCase(Row.SOURCETABLE)) Or (UCase(Row.TARGETVALUE) <> UCase(Row.SOURCEFIELD)) Then

SQL_Text = Replace(SQL_Text, "%" + Row.ITEMTARGETTABLE + "%", Row.TARGETTABLE)

SQL_Text = Replace(SQL_Text, "%" + Row.ITEMTARGETFIELD + "%", Row.TARGETVALUE)

SQL_Text = Replace(SQL_Text, "%" + Row.ITEMSOURCETABLE + "%", Row.SOURCETABLE)

SQL_Text = Replace(SQL_Text, "%" + Row.ITEMSOURCEFIELD + "%", Row.SOURCEFIELD)



Hier wird sich darauf verlassen, dass die Spalten (Row.XXX) da sind.


If (Not Row.ALTERNATEPKJOIN.Length = 0) Then ' Or (Row.ALTERNATEPKJOIN. <> " ") Then



Hier ebenso, generell würde ich hier eher auf String.IsNullEmpty setzen.
If Not String.IsNullOrEmpty(Row.ALTERNATEPKJOIN)) Then

desweiteren ebenso.

Da insgesamt wohl dynamisches SQL erzeugt wird, solltest Du aber
vor allem prüfen, ob die Daten-Eingabe, den durch den Code
vorgegebenen Konventionen entspricht.

(Langfristig wàre mir so was zu wackelig, aber das sollte man
nach Anforderungsprioritàten ordnen.)

Gruß Elmar

Ähnliche fragen