【发布时间】:2017-12-22 16:38:54
【问题描述】:
我在 VS 2008 中有一个脚本任务。在这个脚本任务中,我得到一个数据集并将其转换为 XML,然后循环遍历节点:
Dim dsHistory As New DataSet
dsHistory = GetHistoryByYear(Year)
Dim HistoryDoc As New XmlDocument
HistoryDoc.LoadXml(dsHistory.GetXml)
Dim HistoryStudentList As XmlNodeList
Dim StudentNode as XmlNode
HistoryStudentList = HistoryDox.SelectNodes("/NewDataSet/Table")
dsHistory = Nothing
For Each HistoryStudentNode In HistoryStudentList
Dim dsCurrentAssessment As New DataSet
dsCurrentAssessment = GetCurrentAssessmentData(...)
...code to make sure dataset has data...
Dim CurrentAssessmentDoc As New XmlDocument
CurrentAssessmentDoc.LoadXml(dsCurrentAssessment.GetXml)
Dim CurrentAssessmentNode As XmlNode
CurrentAssessmentNode = CurrentAssessmentDoc.SelectSingleNode("/NewDataSet")
For Each CurrentAssessment As XmlNode In CurrentAssessmentNode.SelectNodes("Table")
InsertAssessmentHistory(HistInstanceID, CurrentAssessment.Item("TITLE").InnerText, CurrentAssessment.Item("CONTENT").InnerText, CurrentAssessment.Item("TYPE").InnerText, CDate(convertAssessmentDate(CurrentAssessment.Item("ADMINISTRATION_DATE").InnerText)), CurrentAssessment.Item("REPORTING_METHOD").InnerText, CurrentAssessment.Item("SCORE_RESULTS").InnerText, CurrentAssessment.Item("INTERPRETATION").InnerText, CStr(htHistory("ASSESSMENT_ACTION")))
Next
Next
我遇到的问题是 InsertAssessmentHistory 方法,特别是调用 CurrentAssessment.Item("SCORE_RESULTS").InnerText。数据集正在为其中一条记录返回空数据,看起来当在该记录上调用 .InnerText 时,由于 XML 标记“...”,它失败并显示“对象引用未设置为对象的实例”。
有没有办法调用.InnerText,如果没有数据则返回null?
【问题讨论】:
-
是的。使用
?.(例如CurrentAssessment.Item("SCORE_RESULTS")?.InnerText) -
@StevenDoggart 当我这样做时,智能感知状态“'System.XML.XMLElement' 类型的值不能转换为字符串”
-
哦。抱歉,我没注意到这是 2008 年的 SSIS。
?.运算符是在 2015 年添加的。因此,如果您不能这样做,那么您将不得不更详细地进行操作(例如 null-coalescingIf,或常规If/Else块,或三元If/IIf,或为您封装它的自定义方法)。 -
If(CurrentAssessment.Item("SCORE_RESULTS") Is Nothing, Nothing, IF(CurrentAssessment.Item("SCORE_RESULTS").InnerText Is Nothing, Nothing, CurrentAssessment.Item("SCORE_RESULTS").InnerText)) -
@DForck42 你有 2 个可行的解决方案,为什么不接受其中一个?
标签: sql-server vb.net ssis etl ssis-2008