Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SSIS转换:为什么我获取的对象未设置为实例错误,除非行包装在条件语句中_C#_Ssis - Fatal编程技术网

C# SSIS转换:为什么我获取的对象未设置为实例错误,除非行包装在条件语句中

C# SSIS转换:为什么我获取的对象未设置为实例错误,除非行包装在条件语句中,c#,ssis,C#,Ssis,我通过平面文件源访问文本/平面文件:在转换任务中,我将输入列作为ZipCode,输出别名为:ZipCode。使用类型:读/写: 我创建了一个输出列;特布克南 代码如下所示: 这只是我观察到的行为的一个例子。 这通常发生在我尝试使用某些方法时,如Trim(或length) //This gives me an error message: //Object Not set to instance Of an object public override void Input0_ProcessI

我通过
平面文件源
访问文本/平面文件:在转换任务中,我将
输入列
作为ZipCode,输出别名为:ZipCode。使用类型:读/写:

我创建了一个
输出列
;特布克南

代码如下所示: 这只是我观察到的行为的一个例子。 这通常发生在我尝试使用某些方法时,如
Trim(
length

//This gives me an error message: 
//Object Not set to instance Of an object

public override void Input0_ProcessInputRow(Input0Buffer Row)
{
string zipCode = (Row.ZipCode.Trim().lenght != 5 ? null : Row.ZipCode.Trim());
}


//This works: 
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
if (!string.IsNullOrEmpty(Row.ZipCode))
{
string zipCode = (Row.ZipCode.Trim().lenght != 5 ? null : Row.ZipCode);
}
}

如果您研究一下自动生成的代码,您会发现ZipCode不是一个基本类型string,而是一个复杂的类型/对象,因为基本类型不支持空值,至少不能很好地支持空值

相反,他们选择做的是创建一个简单的对象,该对象公开一个_IsNull扩展/方法/某物,允许您测试该类型是否为null

编写测试的一种更惯用的方法是(不包括我没有测试空的事实)。您有一个稍微特殊的情况,因为字符串类型有isnullorempty和isnullorwhitespace方法来检查这一点。如果您需要处理其他原语,那么您将非常熟悉_IsNull检查

public override void Input0_ProcessInputRow(Input0Buffer Row)
{
    if (!Row.ZipCode_IsNull))
    {
        string zipCode = (Row.ZipCode.Trim().length != 5 ? null : Row.ZipCode);
    }
}

对不起所有的.NET开发人员。我的术语可能已经过时了。在我整理穿孔卡片时,请随意编辑此答案。

谢谢,为什么我必须先检查null?