反射 PropertyInfo.GetValue

7

我刚开始使用C#中的反射,需要帮助。

PropertyInfo.GetValue(obj, null)会返回一个对象值。

如果数据库中该列的值为NULL,则会引发Null异常:

System.Reflection.TargetInvocationException:目标调用引发了异常。 Microsoft.SqlServer.Dts.Pipeline.ColumnIsNullException:该列具有空值。

如何处理这种情况?应该循环遍历所有列,并留下具有NULL值的列。


这行代码与您的数据库如何连接?什么是 obj - Peter
1
我正在使用SSIS脚本组件编写此内容。根据每行中的列名获取值。 - user922330
我同意Peter的观点...你提供的代码与数据库毫无关系,这是没有意义的。 - myermian
属性信息 columnValue = GetPropertyInfoValue(Row, column); 如果 (columnValue.GetValue(Row, null) != null) { object value; value = columnValue.GetValue(Row, null); } ... 这是我正在尝试做的。 - user922330
我正在反射Input0buffer行。我在SSIS脚本组件中使用它,试图获取每行中某些列的值。在上面的代码中..Row是Input0Buffer行,column是列名,ColumnValue是PropertyInfo。 - user922330
3个回答

7
您可以直接按如下方式检查“Null”。
if(propInfo.GetValue(this, null) != null) {
}

当我输入这个时,我得到了“对象不匹配目标类型”的System.Reflection.TargetException异常。 - user16951074

3
该属性的getter方法抛出了一个异常。它试图告诉你这个属性没有值。
你应该能够检查 PropertyName_IsNull(其中 PropertyName 是属性的名称)来首先检查属性是否为null。如果它为空,适当处理,否则使用你已经编写的代码。
来自MSDN

每个选定输入列的<column>_IsNull属性。此属性也是只读或读/写,具体取决于指定给列的Usage Type。


属性信息 columnValue = GetPropertyInfoValue(Row, column); 如果 (columnValue.GetValue(Row, null) != null) { object value; value = columnValue.GetValue(Row, null); } ... 这就是我想做的。 - user922330
我正在反射Input0buffer行。我在SSIS脚本组件中使用它,试图获取每行中某些列的值。行是Input0Buffer行,列是列名,ColumnValue是PropertyInfo。 - user922330

2

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


该列的值在数据库中为null。我需要处理这种空值情况。 - user922330
我明白你的意思,但是如果不知道PropertyInfo表示的是哪种类型的属性,就很难给出准确的答案。你反射的对象是什么?你想读取哪个属性? - sellmeadog
1
我正在反射Input0buffer行。我在SSIS脚本组件中使用它。 - user922330
1
我正在尝试获取每行中某些列的值。 - user922330

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接