【问题标题】:Reflection PropertyInfo.GetValue反射 PropertyInfo.GetValue
【发布时间】:2011-09-07 16:46:30
【问题描述】:

我不熟悉在 C# 中使用反射。非常感谢任何帮助。

PropertyInfo.GetValue(obj, null) 给我一个对象值。

如果数据库中列的值为空,我得到一个空异常:

System.Reflection.TargetInvocationException:调用的目标已抛出异常。 Microsoft.SqlServer.Dts.Pipeline.ColumnIsNullException:该列具有空值。

如何处理这种情况?我应该遍历所有列并保留具有空值的列。

【问题讨论】:

  • 这行代码是如何连接到你的数据库的? obj 是什么?
  • 我在 SSIS 脚本组件中写这个。根据每行中的列名称获取值。
  • 我同意彼得的观点......这没有意义,因为您提供的代码与数据库无关。
  • 属性信息 columnValue = GetPropertyInfoValue(Row, column); if (columnValue.GetValue(Row, null) != null) { 对象值; value = columnValue.GetValue(Row, null); } ...这就是我想要做的
  • 我正在反映反对派 Input0buffer 行。我在 SSIS 脚本组件中使用它我试图获取每行中某些列的值。在上面的代码中,..Row 是 Input0Buffer Row,column 是 Column Name,ColumnValue 是 PropertyInfo

标签: c# reflection ssis


【解决方案1】:

您可以如下直接检查'Null'

if(propInfo.GetValue(this, null) != null) {
}

【讨论】:

    【解决方案2】:

    该属性的 getter 抛出异常。它试图告诉您该属性没有值。

    您应该能够检查PropertyName_IsNull(其中PropertyName 是属性的名称)以首先检查该属性是否为空。如果为null,则适当处理,否则使用你已经写好的代码。

    来自MSDN

    每个选定输入列的 _IsNull 属性。根据为列指定的使用类型,此属性也是只读或读/写。

    【讨论】:

    • 属性信息 columnValue = GetPropertyInfoValue(Row, column); if (columnValue.GetValue(Row, null) != null) { 对象值; value = columnValue.GetValue(Row, null); } ...这就是我想要做的。
    • 我正在反映反对派 Input0buffer 行。我在 SSIS 脚本组件中使用它我试图获取每行中某些列的值。 Row 是 Input0Buffer Row,column 是 Column Name,ColumnValue 是 PropertyInfo。
    【解决方案3】:

    PropertyInfo.GetValue(obj, null) 正在对对象obj 执行属性获取方法。该 get 方法中引发了异常。您需要查看您正在调用的属性 get 方法并确定何时/为何抛出异常。

    【讨论】:

    • 该列的值为 null,在数据库中为 null。我需要为空值处理这种情况。
    • 我明白了,但是不知道PropertyInfo 代表什么类型的属性,很难给出准确的答案。你在反映什么,一个数据集?正在尝试读取什么属性?
    • 我正在反映反对派 Input0buffer 行。我在 SSIS 脚本组件中使用它
    • 我正在尝试获取每一行中某些列的值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-21
    • 1970-01-01
    • 2015-12-23
    相关资源
    最近更新 更多